ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/Deliantra/Deliantra/Data.pm
Revision: 1.64
Committed: Thu Nov 5 14:46:38 2009 UTC (14 years, 6 months ago) by root
Branch: MAIN
Changes since 1.63: +2 -2 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 =head1 NAME
2    
3 root 1.36 Deliantra::Data - various data structures useful for understanding archs and objects
4 root 1.1
5     =head1
6    
7     THIS FILE IS AUTOGENERATED, DO NOT EDIT!
8    
9     It's a translation of the following files:
10    
11     res/spells.xml
12     res/types.xml
13     res/typenumbers.xml
14    
15     See F<res/README> for more info.
16    
17     =cut
18    
19 root 1.36 package Deliantra::Data;
20 root 1.4
21 root 1.3 our %BITMASK = (
22     attacktype => {
23     0 => 'Physical',
24     1 => 'Magical',
25     2 => 'Fire',
26     3 => 'Electricity',
27     4 => 'Cold',
28     5 => 'Confusion',
29     6 => 'Acid',
30     7 => 'Drain',
31     8 => 'Weaponmagic',
32     9 => 'Ghosthit',
33     10 => 'Poison',
34     11 => 'Slow',
35     12 => 'Paralyze',
36     13 => 'Turn Undead',
37     14 => 'Fear',
38     15 => 'Cancellation',
39     16 => 'Depletion',
40     17 => 'Death',
41     18 => 'Chaos',
42     19 => 'Counterspell',
43     20 => 'God Power',
44     21 => 'Holy Power',
45     22 => 'Blinding'
46     },
47     material => {
48     0 => 'Paper',
49     1 => 'Iron',
50     2 => 'Glass',
51     3 => 'Leather',
52     4 => 'Wood',
53     5 => 'Organics',
54     6 => 'Stone',
55     7 => 'Cloth',
56 root 1.13 8 => 'Adamantite',
57     9 => 'Liquid',
58     10 => 'Soft Metal',
59     11 => 'Bone',
60     12 => 'Ice',
61     13 => '(supress name on display)'
62 root 1.3 },
63 root 1.14 movement_type => {
64     0 => 'Walk',
65     1 => 'Fly Low',
66     2 => 'Fly High',
67     3 => 'Swim',
68 root 1.16 4 => 'Boat',
69     16 => 'Other'
70 root 1.14 },
71 root 1.3 pick_up => {
72     0 => 'Nothing',
73     1 => 'Wealth',
74     2 => 'Food',
75     3 => 'Weapons',
76     4 => 'Armour',
77     5 => 'Inverse',
78     6 => 'All'
79     },
80     spellpath => {
81     0 => 'Protection',
82     1 => 'Fire',
83     2 => 'Frost',
84     3 => 'Electricity',
85     4 => 'Missiles',
86     5 => 'Self',
87     6 => 'Summoning',
88     7 => 'Abjuration',
89     8 => 'Restoration',
90     9 => 'Detonation',
91     10 => 'Mind',
92     11 => 'Creation',
93     12 => 'Teleportation',
94     13 => 'Information',
95     14 => 'Transmutation',
96     15 => 'Transferrence',
97     16 => 'Turning',
98     17 => 'Wounding',
99     18 => 'Death',
100     19 => 'Light'
101     },
102     will_apply => {
103     0 => 'Apply Handles',
104     1 => 'Open Chests',
105     2 => 'Break Walls',
106     3 => 'Open Doors'
107     }
108     );
109    
110     our %LIST = (
111 root 1.15 attack_movement_bits_0_3 => {
112     0 => 'default',
113     1 => 'attack from distance',
114     2 => 'run away',
115     3 => 'hit and run',
116     4 => 'wait, then hit, then move',
117     5 => 'rush blindly',
118     6 => 'always run',
119     7 => 'attack from distance if hit',
120     8 => 'do not approach'
121     },
122     attack_movement_bits_4_7 => {
123     0 => 'none',
124     16 => 'pet',
125     32 => 'small circle',
126     48 => 'large circle',
127     64 => 'small horizontal',
128     80 => 'large horizontal',
129     96 => 'random direction',
130     112 => 'random movement',
131     128 => 'small vertical',
132     144 => 'large vertical'
133     },
134 root 1.3 direction => {
135     0 => '<none>',
136     1 => 'north',
137     2 => 'northeast',
138     3 => 'east',
139     4 => 'southeast',
140     5 => 'south',
141     6 => 'southwest',
142     7 => 'west',
143     8 => 'northwest'
144     },
145 root 1.10 event_type => {
146     0 => 'none',
147     1 => 'apply',
148     2 => 'attack',
149     3 => 'death',
150     4 => 'drop',
151     5 => 'pickup',
152     6 => 'say',
153     7 => 'stop',
154     8 => 'time',
155     9 => 'throw',
156     10 => 'trigger',
157     11 => 'close',
158     12 => 'timer',
159 elmex 1.22 28 => 'move',
160     41 => 'drop_on'
161 root 1.10 },
162 root 1.3 mood => {
163     0 => 'furious',
164     1 => 'angry',
165     2 => 'calm',
166     3 => 'sleep',
167 root 1.63 4 => 'charm',
168     5 => 'destroy monster',
169     6 => 'destroy pet'
170 root 1.1 },
171 root 1.3 potion_effect => {
172     0 => '<none>',
173     65536 => 'life restoration',
174     1048576 => 'improvement'
175 root 1.1 },
176 root 1.3 skill_type => {
177     1 => 'lockpicking',
178     2 => 'hiding',
179     3 => 'smithery',
180     4 => 'bowyer',
181     5 => 'jeweler',
182     6 => 'alchemy',
183     7 => 'stealing',
184     8 => 'literacy',
185     9 => 'bargaining',
186     10 => 'jumping',
187     11 => 'detect magic',
188     12 => 'oratory',
189     13 => 'singing',
190     14 => 'detect curse',
191     15 => 'find traps',
192     16 => 'mediatation',
193     17 => 'punching',
194     18 => 'flame touch',
195     19 => 'karate',
196     20 => 'climbing',
197     21 => 'woodsman',
198     22 => 'inscription',
199     23 => 'one handed weapons',
200     24 => 'missile weapons',
201     25 => 'throwing',
202     26 => 'use magic item',
203     27 => 'disarm traps',
204     28 => 'set traps',
205     29 => 'thaumaturgy',
206     30 => 'praying',
207     31 => 'clawing',
208     32 => 'levitation',
209     33 => 'summoning',
210     34 => 'pyromancy',
211     35 => 'evocation',
212     36 => 'sorcery',
213     37 => 'two handed weapons'
214 root 1.1 },
215 root 1.3 spell_type => {
216     1 => 'raise dead',
217     2 => 'rune',
218     3 => 'make mark',
219     4 => 'bolt',
220     5 => 'bullet',
221     6 => 'explosion',
222     7 => 'cone',
223     8 => 'bomb',
224     9 => 'wonder',
225     10 => 'smite',
226     11 => 'magic missile',
227     12 => 'summon golem',
228     13 => 'dimension door',
229     14 => 'magic mapping',
230     15 => 'magic wall',
231     16 => 'destruction',
232     17 => 'perceive self',
233     18 => 'word of recall',
234     19 => 'invisible',
235     20 => 'probe',
236     21 => 'healing',
237     22 => 'create food',
238     23 => 'earth to dust',
239     24 => 'change ability',
240     25 => 'bless',
241     26 => 'curse',
242     27 => 'summon monster',
243     28 => 'recharge',
244     29 => 'polymorph',
245     30 => 'alchemy',
246     31 => 'remove curse',
247     32 => 'identify',
248     33 => 'detection',
249     34 => 'mood change',
250     35 => 'moving ball',
251     36 => 'swarm',
252     37 => 'charge mana',
253     38 => 'dispel rune',
254     39 => 'create missile',
255     40 => 'consecrate',
256     41 => 'animate weapon',
257     42 => 'light',
258     43 => 'change map light',
259     44 => 'faery fire',
260     45 => 'disease',
261     46 => 'aura',
262     47 => 'town portal'
263 root 1.1 },
264 root 1.3 weapon_type => {
265     0 => '<unknown>',
266     1 => 'sword',
267     2 => 'arrows',
268     3 => 'axe',
269     4 => 'katana',
270     5 => 'knife, dagger',
271     6 => 'whip, chain',
272     7 => 'hammer, flail',
273     8 => 'club, stick'
274     }
275     );
276    
277     our %IGNORE_LIST = (
278     non_pickable => [
279     'value',
280     'nrof',
281     'weight',
282     'name_pl',
283     'material',
284     'no_pick',
285     'unpaid',
286     'title',
287     'identified'
288     ],
289     system_object => [
290     'value',
291     'nrof',
292     'weight',
293     'name_pl',
294     'material',
295     'no_pick',
296     'unpaid',
297     'title',
298     'glow_radius',
299     'identified',
300     'blocksview',
301     'invisible'
302     ]
303     );
304    
305     our %DEFAULT_ATTR = (
306 root 1.7 attr => [
307     [
308     'name',
309     {
310     desc => 'This is the name of the object, displayed to the player.',
311     name => 'name',
312     type => 'string'
313     }
314     ],
315     [
316     'name_pl',
317     {
318     desc => 'This is the plural name of the object. A plural name must be set for all items that can be picked up and collected by the player.',
319     name => 'plural name',
320     type => 'string'
321     }
322     ],
323     [
324     'title',
325     {
326 root 1.9 desc => 'This is the object\'s title. Once an object is identified the title is attached to the name. Typical titles are "of Mostrai", "of xray vision" etc.',
327 root 1.7 name => 'title',
328     type => 'string'
329     }
330     ],
331     [
332     'face',
333     {
334 elmex 1.38 desc => 'The image-name defines what image is displayed for this object in-game. Take care if the archetype of the object has an animation! See also the \'animation\' attribute.',
335 root 1.7 name => 'image',
336     type => 'string'
337     }
338     ],
339     [
340 elmex 1.38 'animation',
341     {
342     desc => 'The animation-name of the object. If you assign custom faces and the archetype defines an animation you can disable the animation of an archetype by setting this field to NONE.',
343     name => 'animation',
344     type => 'string'
345     }
346     ],
347     [
348 root 1.34 'tag',
349     {
350     desc => 'You can tag objects with an identifier. Tagged objects can be found quickly from their tag, which makes them useful to tag exits and refer to those by their name.',
351     name => 'tag',
352     type => 'string'
353     }
354     ],
355     [
356 root 1.7 'nrof',
357     {
358     desc => 'This value determines the number of objects in one stack (for example: 100 goldcoins => "number = 100"). You should set this at least to one, for any pickable object - otherwise it won\'t be mergeable into a stack.',
359     name => 'number',
360     type => 'int'
361     }
362     ],
363     [
364     'weight',
365     {
366 root 1.9 desc => 'This value defines the object\'s weight in grams (1000g is 1kg). Objects with zero weight are not pickable for players. Still, set the "non-pickable"-flag for explicitly non-pickable objects (hey, this is opensource.. you never know ;) ).',
367 root 1.7 name => 'weight',
368     type => 'int'
369     }
370     ],
371     [
372     'value',
373     {
374 root 1.18 desc => 'Determines the value of the object, in units of silver coins (one platinum coin == 50 silver coins). Value for buying/selling will be further modified by various factors. Hence, testing values in-game is usually inevitable.',
375 root 1.7 name => 'value',
376     type => 'int'
377     }
378     ],
379     [
380     'glow_radius',
381     {
382 elmex 1.51 desc => 'If <glow radius> is set to a value greater zero, the object appears lit up on dark maps. <glow radius> can be a value between 0 and 9, the higher, the more light does the object emit.',
383 root 1.7 name => 'glow radius',
384     type => 'int'
385     }
386     ],
387     [
388     'material',
389     {
390     desc => 'This bitmask-value informs the player of which material(s) the object consists. Material does also affect how likely the object can be destroyed by hazardous spell-effects.',
391     name => 'material',
392     type => 'bitmask',
393     value => $BITMASK{material}
394     }
395     ],
396     [
397     'no_pick',
398     {
399     desc => 'If set, the object cannot be picked up (Neither by players nor monsters).',
400     name => 'non-pickable',
401     type => 'bool'
402     }
403     ],
404     [
405     'invisible',
406     {
407     desc => 'Generally makes the object invisible. Depending on the object-type, some can be made visible by the show_invisible spell. If in doubt, test it. Putting an invisible object under the floor always prevents it from being shown.',
408     name => 'invisible',
409     type => 'bool'
410     }
411     ],
412     [
413     'blocksview',
414     {
415 root 1.53 desc => 'If an item is set to block view, players (and monsters) cannot see beyond it unless they cross it or manage to stand ontop.',
416 root 1.7 name => 'block view',
417     type => 'bool'
418     }
419     ],
420     [
421     'identified',
422     {
423     desc => 'If an item is identified, the player has full knowledge about it.',
424     name => 'identified',
425     type => 'bool'
426     }
427     ],
428     [
429     'unpaid',
430     {
431 elmex 1.47 desc => 'An <unpaid> item cannot be used unless a player carried it over a shop mat, paying the demanded price. Setting this flag makes sense only for pickable items inside shops.',
432 root 1.7 name => 'unpaid',
433     type => 'bool'
434     }
435 elmex 1.32 ],
436     [
437     'sound',
438     {
439     desc => 'The sound this objects makes on a map. Enter either a sound alias from arch/res/sound.conf.res or a path. If you enter <path> in this field it will point to sound/<path>.ext',
440     name => 'sound',
441     type => 'string'
442     }
443     ],
444     [
445     'sound_destroy',
446     {
447     desc => 'The sound this objects makes when it is destroyed. Enter either a sound alias from arch/res/sound.conf.res or a path. If you enter <path> in this field it will point to sound/<path>.ext',
448     name => 'destroy sound',
449     type => 'string'
450     }
451 root 1.7 ]
452     ]
453 root 1.3 );
454    
455     our %TYPE = (
456     Ability => {
457 root 1.7 attr => [
458     [
459     'invisible',
460     {
461     type => 'fixed',
462     value => 1
463     }
464     ],
465     [
466     'no_drop',
467     {
468     type => 'fixed',
469     value => 1
470     }
471     ],
472     [
473     'sp',
474     {
475     desc => 'The monster will use the specified <short range spell> when the player is within 6-square radius (of the monster\'s head).',
476     name => 'short range spell',
477     type => 'spell'
478     }
479     ],
480     [
481     'hp',
482     {
483     desc => 'The monster will use the specified <long range spell> when the player is at least 6 squares away (from the monster\'s head). Setting a <long range spell> is optional. If unset, the <short range spell> gets used all the time.',
484     name => 'long range spell',
485     type => 'nz_spell'
486     }
487     ],
488     [
489     'maxsp',
490     {
491     desc => 'Sometimes you\'ll want a monster to use one ability more than others. To achieve this, set the <importance> to a value greater than one. Abilities with this value zero/unset are counted to be of <importance> one. Example: A monster with "small fireball" of <importance> 3 and "paralyze" of <importance> 1 will averagely cast three out of four times the "small fireball".',
492     name => 'importance',
493     type => 'int'
494     }
495     ],
496     [
497     'attacktype',
498     {
499 root 1.9 desc => 'This flag specifies whether the ability <is magical> in nature. If enabled, all spells produced by this ability will have magic attacktype added to the usual attacktypes. This should always be set for spell-like abilities. "Natural" abilities like a dragon\'s firebreath are an exception. Note that non-magical abilities are more dangerous because magic resistance does not protect from those.',
500 root 1.7 name => 'is magical',
501     type => 'bool',
502     value => [
503     0,
504     2
505     ]
506     }
507     ]
508     ],
509 root 1.44 desc => 'Abilities are to be put in a monster\'s inventory. They grant monsters the knowledge to cast spells. Spells from abilities are usually magical in nature, thus adding magic attacktype to the spell-damage they produce. <br><br> A particularly nice feature of abilities is that they can hold two spells: One for short range - and one for long range use. \\n\\n You should know that spellcasting monsters receive abilities via &lt;treasurelist&gt;.',
510 root 1.3 ignore => [
511     $IGNORE_LIST{system_object}
512     ],
513 root 1.5 name => 'Ability',
514 root 1.3 use => 'If you want to create "customized" spellcasting monsters, you should use abilities (rather than spellbooks/wands or something). The long/short-range spell feature can make boss-monsters more interesting and challenging. <br><br> You should keep in mind that magic abilities allow players to get better resistance. You can turn off the magic part to make the spells more dangerous. However, this really shouldn\'t be neccessary unless you work on very high level maps. And what fun is a magic resistance cloak when it has no effect?'
515     },
516     Altar => {
517 root 1.7 attr => [
518     [
519     'no_pick',
520     {
521     type => 'fixed',
522     value => 1
523     }
524     ],
525     [
526 root 1.14 'move_on',
527 root 1.7 {
528 root 1.14 desc => 'Which movement types automatically (as opposed to manually) activate this object.',
529 root 1.58 name => 'movement on',
530 elmex 1.26 type => 'movement_type'
531 root 1.7 }
532     ],
533     [
534     'slaying',
535     {
536 root 1.55 desc => 'This string specifies the item that must be put on the altar to activate it. It can either be the name of an archetype, or directly the name of an object. Yet, titles are not recognized by altars. If you want the player to have to drop a specific amount of money use "money". See also the "drop amount" attribute. If the string starts with \'match \', then it is interpreted as a match expression (e.g. \'match type=POTION\', or \'match type=SPELL in applied type=CONTAINER in inv in originator\'). For details, see http://pod.tst.eu/http://cvs.schmorp.de/deliantra/server/lib/cf/match.pm',
537 root 1.7 name => 'match item name',
538     type => 'string'
539     }
540     ],
541     [
542     'food',
543     {
544     desc => 'The drop amount specifies the amount of items (specified in <match item name>) that must be dropped to activate the altar. If <match item name> is set to "money", then the value of the sacrificed money must be equal to <drop amount> (ie, if food=200, then 200 silver, 20 gold, or 4 platinum will all work.) Note that the maximum possible for <drop amount> is 32767.',
545     name => 'drop amount',
546     type => 'int'
547     }
548     ],
549     [
550     'connected',
551     {
552     desc => 'If a connection value is set, the altar will trigger all objects with the same value, when activated. This will only work once.',
553     name => 'connection',
554 root 1.50 type => 'string'
555 root 1.7 }
556     ],
557     [
558     'sp',
559     {
560 root 1.9 desc => 'When activated, the selected <spell> will be casted (once, on the player). This should work for any given spell. The altar will work infinitely in this way. Don\'t set both <spell> and <connection> for one altar.',
561 root 1.7 name => 'spell',
562     type => 'spell'
563     }
564     ],
565     [
566     'msg',
567     {
568     desc => 'This text will be displayed to the player in the exact moment when the altar is activated.',
569     end => 'endmsg',
570     name => 'message',
571     type => 'text'
572     }
573     ]
574     ],
575 root 1.9 desc => 'When a player puts a defined number of certain items on the altar, then either a spell is casted (on the player) or a connector is triggered. If the latter is the case, the altar works only once. Either way, the sacrificed item disappears.',
576 root 1.3 ignore => [
577     $IGNORE_LIST{non_pickable}
578 root 1.5 ],
579     name => 'Altar'
580 root 1.3 },
581     'Altar Trigger' => {
582 root 1.7 attr => [
583     [
584     'no_pick',
585     {
586     type => 'fixed',
587     value => 1
588     }
589     ],
590     [
591     'slaying',
592     {
593 root 1.55 desc => 'This string specifies the item that must be put on the altar to activate it. It can either be the name of an archetype, or directly the name of an object. Yet, titles are not recognized by altars. If you want the player to have to drop a specific amount of money use "money". See also the "drop amount" attribute. If the string starts with \'match \', then it is interpreted as a match expression (e.g. \'match type=POTION\', or \'match type=SPELL in applied type=CONTAINER in inv in originator\'). For details, see http://pod.tst.eu/http://cvs.schmorp.de/deliantra/server/lib/cf/match.pm',
594 root 1.7 name => 'match item name',
595     type => 'string'
596     }
597     ],
598     [
599     'food',
600     {
601     desc => 'The drop amount specifies the amount of items (specified in <match item name>) that must be dropped to activate the altar. If <match item name> is set to "money", then the value of the sacrificed money must be equal to <drop amount> (ie, if food=200, then 200 silver, 20 gold, or 4 platinum will all work.) Note that the maximum possible for <drop amount> is 32767.',
602     name => 'drop amount',
603     type => 'int'
604     }
605     ],
606     [
607     'connected',
608     {
609     desc => 'If a connection value is set, the altar will trigger all objects with the same value, when activated. This will only work once.',
610     name => 'connection',
611 root 1.50 type => 'string'
612 root 1.7 }
613     ],
614     [
615     'sp',
616     {
617 root 1.9 desc => 'When activated, this <spell> will be casted (once, on the player). This should work for any given spell. The altar will work infinitely in this way. Don\'t set both <spell> and <connection> for one altar.',
618 root 1.7 name => 'spell',
619     type => 'spell'
620     }
621     ],
622     [
623     'exp',
624     {
625     desc => 'Being activated, the altar will reset after <reset time> ticks. After reset, the altar is ready to be activated once again. The default <reset time> is 30.',
626     name => 'reset time',
627     type => 'int'
628     }
629     ],
630     [
631     'last_sp',
632     {
633     desc => 'If this attribute is enabled, the altar_trigger won\'t push the connected value by altar reset. Only ONCE by dropping the sacrifice. This is typically used when the altar is connected to a creator, e.g. for selling tickets. If this attribute is disabled (default), the altar_trigger will push the connected value TWICE per sacrifice: First by dropping sacrifice, second by reset. This mode is typically used for altars being connected to gates, resulting in the gate being opened and closed again.',
634     name => 'ignore reset',
635     type => 'bool'
636     }
637     ],
638     [
639 root 1.14 'move_on',
640 root 1.7 {
641 root 1.14 desc => 'Which movement types automatically (as opposed to manually) activate this object.',
642 root 1.58 name => 'movement on',
643 elmex 1.26 type => 'movement_type'
644 root 1.7 }
645     ],
646     [
647     'msg',
648     {
649     desc => 'This text will be displayed to the player in the exact moment when the altar is activated.',
650     end => 'endmsg',
651     name => 'message',
652     type => 'text'
653     }
654     ]
655     ],
656 root 1.9 desc => 'Altar_triggers work pretty much like normal altars (drop sacrifice -> connection activated), except for the fact that they reset after usage. Hence, altar_triggers can be used infinitely.',
657 root 1.3 ignore => [
658     $IGNORE_LIST{non_pickable}
659     ],
660 root 1.5 name => 'Altar Trigger',
661 root 1.3 use => 'Altar_triggers are very useful if you want to charge a price for... <UL> <LI> ...an item. -> Connect the altar_trigger (set "last_sp 1") to a creator. <LI> ...opening a gate. -> Connect the altar_trigger (set "last_sp 0") to the gate. <LI> ...information. -> Connect the altar_trigger (set "last_sp 1") to a magic_mouth. </UL> The big advantage over normal altars is the infinite usability of altar_triggers! If there are ten players on one server, they\'re quite grateful if things work more than once. =)'
662     },
663     Amulet => {
664 root 1.7 attr => [
665     [
666     'ac',
667     {
668     desc => 'This value defines the amount of armour-class bonus for wearing this item. <Armour class> lessens the chance of being hit. Lower values are better. It should usually be set only for armour-like equipment.',
669     name => 'armour class',
670     type => 'int'
671     }
672     ],
673     [
674     'wc',
675     {
676     desc => 'The <weapon class> value adds to the overall weapon class of the wielder\'s melee attacks. Weapon class improves the chance of hitting the opponent. Weapon class is the "counterpiece" of <armour class>. It should usually be set only for weapon-like items. Lower values are better.',
677     name => 'weapon class',
678     type => 'int'
679     }
680     ],
681     [
682     'item_power',
683     {
684 root 1.37 desc => 'The <item power> value measures how "powerful" an artifact is. Players will only be able to wear equipment with a certain total amount of <item power>, depending on their own level. This is the only way to prevent low level players to wear "undeserved" equipment (like gifts from other players or cheated items). It is very important to adjust the <item power> value carefully for every artifact you create! If zero/unset, the Deliantra server will calculate a provisional value at runtime, but this is never going to be an accurate measurement of <item power>.',
685 root 1.7 name => 'item power',
686     type => 'int'
687     }
688     ],
689     [
690     'damned',
691     {
692     desc => 'A damned piece of equipment cannot be unwielded unless the curse is removed. Removing damnations is a tick harder than removing curses.',
693     name => 'damnation',
694     type => 'bool'
695     }
696     ],
697     [
698     'cursed',
699     {
700     desc => 'A cursed piece of equipment cannot be unwielded unless the curse is removed.',
701     name => 'curse',
702     type => 'bool'
703     }
704     ],
705     [
706     'lifesave',
707     {
708 root 1.9 desc => 'An item with this flag enabled will save the players life for one time: When the player is wearing this item and his health points reach zero, the item disappears, replenishing half of the player\'s health. An item with <save life> should not have any decent additional bonuses!',
709 root 1.7 name => 'save life',
710     type => 'bool'
711     }
712     ],
713     [
714     'unique',
715     {
716     desc => 'Unique items exist only one time on a server. If the item is taken, lost or destroyed - it\'s gone for good.',
717     name => 'unique item',
718     type => 'bool'
719     }
720     ],
721     [
722     'startequip',
723     {
724     desc => 'A godgiven item vanishes as soon as the player drops it to the ground.',
725     name => 'godgiven item',
726     type => 'bool'
727     }
728     ],
729     [
730     'applied',
731     {
732     desc => 'If you put this item into the inventory of a monster, and you want the monster to use/wear the item - you must set <is applied>. Enabling this flag doesn\'t make any sense if the item is NOT in a monster\'s inventory.',
733     name => 'is applied',
734     type => 'bool'
735     }
736     ],
737     [
738     'msg',
739     {
740     desc => 'This text describes the item\'s "story". Every decent artifact should have such a description.',
741     end => 'endmsg',
742     name => 'description',
743     type => 'text'
744     }
745     ]
746     ],
747 root 1.3 desc => 'Wearing an amulet, the object\'s stats will directly be inherited to the player. Amulets are usually meant for protection and defense.',
748 root 1.5 name => 'Amulet',
749 root 1.4 section => [
750     [
751 elmex 1.33 'stats',
752     [
753     [
754     'Str',
755     {
756     desc => 'The player\'s strentgh will rise/fall by the given value for permanent (of course there is an upper limit). Generally there shouldn\'t be stat potions granting more than one stat. Cursed potions will subtract the stats if positive.',
757     name => 'strength',
758     type => 'int'
759     }
760     ],
761     [
762     'Dex',
763     {
764     desc => 'The player\'s strentgh will rise/fall by the given value for permanent (of course there is an upper limit). Generally there shouldn\'t be stat potions granting more than one stat. Cursed potions will subtract the stats if positive.',
765     name => 'dexterity',
766     type => 'int'
767     }
768     ],
769     [
770     'Con',
771     {
772     desc => 'The player\'s strentgh will rise/fall by the given value for permanent (of course there is an upper limit). Generally there shouldn\'t be stat potions granting more than one stat. Cursed potions will subtract the stats if positive.',
773     name => 'constitution',
774     type => 'int'
775     }
776     ],
777     [
778     'Int',
779     {
780     desc => 'The player\'s strentgh will rise/fall by the given value for permanent (of course there is an upper limit). Generally there shouldn\'t be stat potions granting more than one stat. Cursed potions will subtract the stats if positive.',
781     name => 'intelligence',
782     type => 'int'
783     }
784     ],
785     [
786     'Pow',
787     {
788     desc => 'The player\'s strentgh will rise/fall by the given value for permanent (of course there is an upper limit). Generally there shouldn\'t be stat potions granting more than one stat. Cursed potions will subtract the stats if positive.',
789     name => 'power',
790     type => 'int'
791     }
792     ],
793     [
794     'Wis',
795     {
796     desc => 'The player\'s strentgh will rise/fall by the given value for permanent (of course there is an upper limit). Generally there shouldn\'t be stat potions granting more than one stat. Cursed potions will subtract the stats if positive.',
797     name => 'wisdom',
798     type => 'int'
799     }
800     ],
801     [
802     'Cha',
803     {
804     desc => 'The player\'s strentgh will rise/fall by the given value for permanent (of course there is an upper limit). Generally there shouldn\'t be stat potions granting more than one stat. Cursed potions will subtract the stats if positive.',
805     name => 'charisma',
806     type => 'int'
807     }
808     ]
809     ]
810     ],
811     [
812 root 1.4 'resistance',
813 root 1.7 [
814     [
815     'resist_physical',
816     {
817 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
818 root 1.7 name => 'resist physical %',
819     type => 'int'
820     }
821     ],
822     [
823     'resist_magic',
824     {
825 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
826 root 1.7 name => 'resist magic %',
827     type => 'int'
828     }
829     ],
830     [
831     'resist_fire',
832     {
833 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
834 root 1.7 name => 'resist fire %',
835     type => 'int'
836     }
837     ],
838     [
839     'resist_electricity',
840     {
841 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
842 root 1.7 name => 'resist electricity %',
843     type => 'int'
844     }
845     ],
846     [
847     'resist_cold',
848     {
849 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
850 root 1.7 name => 'resist cold %',
851     type => 'int'
852     }
853     ],
854     [
855     'resist_acid',
856     {
857 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
858 root 1.7 name => 'resist acid %',
859     type => 'int'
860     }
861     ],
862     [
863 elmex 1.33 'resist_confusion',
864 root 1.7 {
865 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
866     name => 'resist confusion %',
867 root 1.7 type => 'int'
868     }
869     ],
870     [
871     'resist_weaponmagic',
872     {
873 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
874 root 1.7 name => 'resist weaponmagic %',
875     type => 'int'
876     }
877     ],
878     [
879     'resist_ghosthit',
880     {
881 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
882 root 1.7 name => 'resist ghosthit %',
883     type => 'int'
884     }
885     ],
886     [
887     'resist_slow',
888     {
889 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
890 root 1.7 name => 'resist slow %',
891     type => 'int'
892     }
893     ],
894     [
895     'resist_fear',
896     {
897 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
898 root 1.7 name => 'resist fear %',
899     type => 'int'
900     }
901     ],
902     [
903     'resist_death',
904     {
905 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
906 root 1.7 name => 'resist death-attack %',
907     type => 'int'
908     }
909     ],
910     [
911     'resist_chaos',
912     {
913 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
914 root 1.7 name => 'resist chaos %',
915     type => 'int'
916     }
917     ],
918     [
919     'resist_blind',
920     {
921 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
922 root 1.7 name => 'resist blinding %',
923     type => 'int'
924     }
925     ],
926     [
927     'resist_holyword',
928     {
929 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
930 root 1.7 name => 'resist holy power %',
931     type => 'int'
932     }
933     ],
934     [
935 elmex 1.33 'resist_godpower',
936 root 1.7 {
937 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
938     name => 'resist godpower %',
939 root 1.7 type => 'int'
940     }
941     ],
942     [
943 elmex 1.33 'resist_paralyze',
944 root 1.7 {
945 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
946     name => 'resist paralyze %',
947 root 1.7 type => 'int'
948     }
949     ],
950     [
951 elmex 1.33 'resist_drain',
952 root 1.7 {
953 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
954     name => 'resist draining %',
955 root 1.7 type => 'int'
956     }
957     ],
958     [
959 elmex 1.33 'resist_deplete',
960 root 1.7 {
961 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
962     name => 'resist depletion %',
963 root 1.7 type => 'int'
964     }
965     ],
966     [
967 elmex 1.33 'resist_poison',
968 root 1.7 {
969 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
970     name => 'resist poison %',
971 root 1.7 type => 'int'
972     }
973     ]
974     ]
975     ],
976     [
977     'misc',
978     [
979     [
980     'luck',
981     {
982     desc => 'With positive luck bonus, the player is more likely to succeed in all sorts of things (spellcasting, praying,...). Unless the <luck bonus> is very high, the effect will be barely visible in-game. Luck bonus on one piece of equipment should never exceed 3, and such bonus should not be too frequently available.',
983     name => 'luck bonus',
984     type => 'int'
985     }
986     ],
987     [
988     'hp',
989     {
990     desc => 'Positive <health regen.> bonus speeds up the player\'s healing process. Negative values slow it down.',
991     name => 'health regen.',
992     type => 'int'
993     }
994     ],
995     [
996     'sp',
997     {
998     desc => 'Positive <mana regen.> bonus speeds up the player\'s mana regeneration. Negative values slow it down.',
999     name => 'mana regen.',
1000     type => 'int'
1001     }
1002     ],
1003     [
1004     'grace',
1005     {
1006     desc => 'Positive <grace regen.> bonus speeds up the player\'s grace regeneration. Negative values slow it down. Since grace can be regenerated rather easy with praying, additional <grace regen.> bonus should be VERY RARE!!',
1007     name => 'grace regen.',
1008     type => 'int'
1009     }
1010     ],
1011     [
1012     'food',
1013     {
1014     desc => 'Positive <food bonus> slows down the player\'s digestion, thus he consumes less food. Negative values speed it up. Note that food is consumed not only for "being alive", but also for healing and mana-regeneration. <food bonus> only affects the amount of food consumed for "being alive". Hence, even with high <food bonus>, during a fight a player can run out of food quickly.',
1015     name => 'food bonus',
1016     type => 'int'
1017     }
1018     ],
1019     [
1020     'xrays',
1021     {
1022 root 1.9 desc => 'Xray vision allows the player to see through obstacles in a two-square-wide radius. This is extremely helpful and desirable, so don\'t give it away for cheap on equipment.',
1023 root 1.7 name => 'xray vision',
1024     type => 'bool'
1025     }
1026     ],
1027     [
1028     'stealth',
1029     {
1030     desc => 'Stealth allows the player to move silently. This comes to effect if a player turns himself invisible and tries to sneak around monsters. (At least that was the idea behind it)',
1031     name => 'stealth',
1032     type => 'bool'
1033     }
1034     ],
1035     [
1036     'reflect_spell',
1037     {
1038     desc => 'If a player is wearing any piece of equipment with the ability to <reflect spells>, all kinds of spell-bullets and -beams will bounce off him. This works only about 90% of all times, to avoid players being completely immune to certain types of attacks. This is a very powerful ability and it shouldn\'t be handed out cheap!',
1039     name => 'reflect spells',
1040     type => 'bool'
1041     }
1042     ],
1043     [
1044     'reflect_missile',
1045     {
1046     desc => 'If a player is wearing any piece of equipment with the ability to <reflect missiles>, all kinds of projectiles (e.g. arrows, bolts, boulders) will bounce off him. This works only about 90% of all times, to avoid players being completely immune to certain types of attacks.',
1047     name => 'reflect missiles',
1048     type => 'bool'
1049     }
1050     ],
1051     [
1052 root 1.14 'move_type',
1053 root 1.7 {
1054 root 1.14 desc => 'Determines which kinds of movement this object can use (e.g. for monsters) or grants (e.g. for amulets).',
1055     name => 'movement type',
1056 elmex 1.26 type => 'movement_type'
1057 root 1.7 }
1058     ],
1059     [
1060     'path_attuned',
1061     {
1062     desc => 'Click on the <attuned paths> button to select spellpaths. The player will get attuned to the specified spellpaths while wearing this item.',
1063     name => 'attuned paths',
1064     type => 'bitmask',
1065     value => $BITMASK{spellpath}
1066     }
1067     ],
1068     [
1069     'path_repelled',
1070     {
1071     desc => 'Click on the <repelled paths> button to select spellpaths. The player will get repelled to the specified spellpaths while wearing this item.',
1072     name => 'repelled paths',
1073     type => 'bitmask',
1074     value => $BITMASK{spellpath}
1075     }
1076     ],
1077     [
1078     'path_denied',
1079     {
1080     desc => 'Click on the <denied paths> button to select spellpaths. The specified spellpaths will be denied to the player while wearing this item.',
1081     name => 'denied paths',
1082     type => 'bitmask',
1083     value => $BITMASK{spellpath}
1084     }
1085     ]
1086     ]
1087     ]
1088     ],
1089     use => 'Feel free to create your own special artifacts. However, it is very important that you keep your artifact in balance with existing maps.'
1090     },
1091     Battleground => {
1092     attr => [
1093     [
1094     'no_pick',
1095     {
1096     type => 'fixed',
1097     value => 1
1098     }
1099     ],
1100     [
1101     'is_floor',
1102 root 1.4 {
1103 root 1.7 type => 'fixed',
1104     value => 1
1105 root 1.4 }
1106     ],
1107     [
1108 root 1.7 'hp',
1109 root 1.4 {
1110 root 1.7 desc => 'The exit destinations define the (x, y)-coordinates where players get teleported after they died on this battleground.',
1111     name => 'destination X',
1112     type => 'int'
1113 root 1.4 }
1114     ],
1115     [
1116 root 1.7 'sp',
1117 root 1.4 {
1118 root 1.7 desc => 'The exit destinations define the (x, y)-coordinates where players get teleported after they died on this battleground.',
1119     name => 'destination Y',
1120     type => 'int'
1121 root 1.4 }
1122     ]
1123     ],
1124 root 1.3 desc => 'Battleground is very special: In short, players can die on battleground without any death penalties. They don\'t loose or gain experience while on battleground. Acid, draining and depletion effects don\'t work either. When a player dies on battleground, he gets teleported to an exit location which is defined in the battleground object.',
1125     ignore => [
1126     $IGNORE_LIST{non_pickable}
1127     ],
1128 root 1.5 name => 'Battleground',
1129 root 1.3 use => 'Battleground is only meant for player vs. player duels. You can design combat arenas similiar to the one in scorn.<br> What should NEVER be done is placing battleground tiles in open dungeons or other free kinds of land. It must not be possible to gain significant treasure for fighting on battleground, because it bears no risk.<br><br> (Battleground will cease to work when the image or name is changed, or when it is placed beneath another floor tile. This is not a bug, it is there to prevent any attempts of placing "hidden" battleground tiles anywhere.)'
1130     },
1131     Book => {
1132 root 1.7 attr => [
1133     [
1134     'level',
1135     {
1136     desc => 'If this value is set to be greater than zero, the player needs a certain literacy level to succeed reading the book. The book can be read if: mental_level greater <literacy level> - 5. Adding level to a book can be a nice idea, personally I like it when a player needs more than his fighting skills to solve a quest. However, keep the booklevel at least below 15 because it is quite hard to gain high mental levels.',
1137     name => 'literacy level',
1138     type => 'int'
1139     }
1140     ],
1141     [
1142     'startequip',
1143     {
1144     desc => 'A godgiven item vanishes as soon as the player drops it to the ground.',
1145     name => 'godgiven item',
1146     type => 'bool'
1147     }
1148     ],
1149     [
1150     'unique',
1151     {
1152     desc => 'Unique items exist only one time on a server. If the item is taken, lost or destroyed - it\'s gone for good.',
1153     name => 'unique item',
1154     type => 'bool'
1155     }
1156     ],
1157     [
1158     'msg',
1159     {
1160     desc => 'This is the text that appears "written" in the book.',
1161     end => 'endmsg',
1162     name => 'book content',
1163     type => 'text'
1164     }
1165 root 1.14 ],
1166     [
1167     'slaying',
1168     {
1169     desc => 'This is the key string of the book. The key string is checked by an inventory checker. (This is used eg. for the gate/port passes in scorn)',
1170     name => 'key string',
1171     type => 'string'
1172     }
1173 elmex 1.48 ],
1174     [
1175     'no_skill_ident',
1176     {
1177     desc => 'If this flag is true the player won\'t be able to identify this item with by using a skill.',
1178     name => 'no skill ident',
1179     type => 'bool'
1180     }
1181 root 1.7 ]
1182     ],
1183 root 1.5 desc => 'Applying a book, the containing message is displayed to the player.',
1184     name => 'Book'
1185 root 1.1 },
1186 root 1.3 Boots => {
1187 root 1.7 attr => [
1188     [
1189     'exp',
1190     {
1191     desc => 'Boots with <speed bonus> will increase the player\'s walking speed while worn. This kind of bonus is quite desirable for players of low- and medium level. High level players usually have fastest possible walking speed and thus don\'t need <speed bonus> anymore. Still, this bonus is good for nice artifacts - not everything has to be for highest level.',
1192     name => 'speed bonus',
1193     type => 'int'
1194     }
1195     ],
1196     [
1197     'magic',
1198     {
1199     desc => '<magic bonus> works just like ac, except that it can be improved by "scrolls of Enchant Armour" or reduced by acid. It is less useful than direct armour-class bonus on the boots. Important: <magic bonus> on boots has no effect if there is no <armour class> set. It only works in combination with <armour class>.',
1200     name => 'magic bonus',
1201     type => 'int'
1202     }
1203     ]
1204     ],
1205 root 1.3 desc => 'Wearing boots, the object\'s stats will directly be inherited to the player. Usually enhancing his speed, or granting some minor protection bonus.',
1206     import => [
1207 root 1.29 'Amulet'
1208 root 1.3 ],
1209 root 1.5 name => 'Boots',
1210 root 1.3 use => 'Feel free to create your own special artifacts. However, it is very important that you keep your artifact in balance with existing maps.'
1211     },
1212     Bracers => {
1213 root 1.7 attr => [
1214     [
1215     'magic',
1216     {
1217     desc => '<magic bonus> works just like ac, except that it can be improved by "scrolls of Enchant Armour" or reduced by acid. It is less useful than direct armour-class bonus on the bracers.',
1218     name => 'magic bonus',
1219     type => 'int'
1220     }
1221     ]
1222     ],
1223 root 1.3 desc => 'Bracers are armour-plates worn around the wrists. Wearing bracer, the object\'s stats will directly be inherited to the player. Usually enhancing his defense.',
1224     import => [
1225 root 1.29 'Amulet'
1226 root 1.3 ],
1227 root 1.5 name => 'Bracers',
1228 root 1.3 use => 'Feel free to create your own special artifacts. However, it is very important that you keep your artifact in balance with existing maps.'
1229     },
1230     'Brestplate Armour' => {
1231 root 1.7 attr => [
1232     [
1233     'last_heal',
1234     {
1235     desc => 'This poses a penalty to spell regeneration speed, for wearing the armour. The bigger the spellpoint penalty, the worse.',
1236     name => 'spellpoint penalty',
1237     type => 'int'
1238     }
1239     ],
1240     [
1241     'last_sp',
1242     {
1243     desc => 'Slowdown penalty reduces the player\'s walking speed when wearing the armour. Bigger values are worse - zero is best.',
1244     name => 'slowdown penalty',
1245     type => 'int'
1246     }
1247     ],
1248     [
1249     'magic',
1250     {
1251     desc => '<magic bonus> works just like ac, except that it can be improved by "scrolls of Enchant Armour" or reduced by acid. It is less useful than direct armour-class bonus on the armour.',
1252     name => 'magic bonus',
1253     type => 'int'
1254     }
1255     ]
1256     ],
1257 root 1.3 desc => 'Wearing an armour, the object\'s stats will directly be inherited to the player. Usually enhancing his defense.',
1258 root 1.7 import => [
1259 root 1.29 'Amulet'
1260 root 1.7 ],
1261     name => 'Brestplate Armour',
1262     use => 'Feel free to create your own special artifacts. However, it is very important that you keep your artifact in balance with existing maps.'
1263     },
1264     Button => {
1265     attr => [
1266     [
1267 root 1.14 'move_on',
1268 root 1.7 {
1269 root 1.14 desc => 'Which movement types automatically (as opposed to manually) activate this object.',
1270 root 1.58 name => 'movement on',
1271 elmex 1.26 type => 'movement_type'
1272 root 1.7 }
1273     ],
1274     [
1275 root 1.14 'move_off',
1276 root 1.7 {
1277 root 1.14 desc => 'Which movement types deactivate this object (e.g. button).',
1278 root 1.58 name => 'movement off',
1279 elmex 1.26 type => 'movement_type'
1280 root 1.7 }
1281     ],
1282     [
1283     'no_pick',
1284     {
1285     type => 'fixed',
1286     value => 1
1287     }
1288     ],
1289     [
1290     'weight',
1291     {
1292     desc => 'The button is pressed (triggered), as soon as <press weigh> gram are placed ontop of it.',
1293     name => 'press weight',
1294 root 1.9 type => 'int'
1295 root 1.7 }
1296     ],
1297     [
1298     'connected',
1299     {
1300     desc => 'Every time the button is pressed or released, all objects with the same <connection> value are activated.',
1301     name => 'connection',
1302 root 1.50 type => 'string'
1303 root 1.7 }
1304     ],
1305     [
1306     'msg',
1307     {
1308     desc => 'This text may describe the item. You can use this message to explain the button\'s purpose to the player.',
1309     end => 'endmsg',
1310     name => 'description',
1311     type => 'text'
1312     }
1313     ]
1314 root 1.3 ],
1315     desc => 'When a predefined amount of weigh is placed on a button, the &lt;connection&gt; value is triggered. In most cases this happens when a player or monster steps on it. When the button is "released", the &lt;connection&gt; value get\'s triggered a second time.',
1316     ignore => [
1317     $IGNORE_LIST{non_pickable}
1318 root 1.5 ],
1319     name => 'Button'
1320 root 1.3 },
1321 root 1.9 'Button Trigger' => {
1322     desc => 'Handle buttons are buttons which reset after a short period of time. Every time it is either applied or reset, the &lt;connection&gt; value is triggered.',
1323     ignore => [
1324     $IGNORE_LIST{non_pickable}
1325     ],
1326     import => [
1327 root 1.29 'Button'
1328 root 1.9 ],
1329     name => 'Button Trigger'
1330     },
1331     'Class Changer' => {
1332     attr => [
1333     [
1334     'randomitems',
1335     {
1336     desc => 'This entry determines which initial items the character receives.',
1337     name => 'class items',
1338     type => 'treasurelist'
1339     }
1340     ]
1341     ],
1342     desc => 'Class changer are used while creating a character.',
1343     ignore => [
1344     $IGNORE_LIST{non_pickable}
1345     ],
1346     name => 'Class Changer',
1347     section => [
1348     [
1349     'stats',
1350     [
1351     [
1352     'Str',
1353     {
1354     desc => 'The player\'s strength will rise by the given value if he chooses this class. (Negative values make strength fall)',
1355     name => 'strength',
1356     type => 'int'
1357     }
1358     ],
1359     [
1360     'Dex',
1361     {
1362     desc => 'The player\'s dexterity will rise by the given value if he chooses this class. (Negative values make dexterity fall)',
1363     name => 'dexterity',
1364     type => 'int'
1365     }
1366     ],
1367     [
1368     'Con',
1369     {
1370     desc => 'The player\'s constitution will rise by the given value if he chooses this class. (Negative values make constitution fall)',
1371     name => 'constitution',
1372     type => 'int'
1373     }
1374     ],
1375     [
1376     'Int',
1377     {
1378     desc => 'The player\'s intelligence will rise by the given value if he chooses this class. (Negative values make intelligence fall)',
1379     name => 'intelligence',
1380     type => 'int'
1381     }
1382     ],
1383     [
1384     'Pow',
1385     {
1386     desc => 'The player\'s power will rise by the given value if he chooses this class. (Negative values make power fall)',
1387     name => 'power',
1388     type => 'int'
1389     }
1390     ],
1391     [
1392     'Wis',
1393     {
1394     desc => 'The player\'s wisdom will rise by the given value if he chooses this class. (Negative values make wisdom fall)',
1395     name => 'wisdom',
1396     type => 'int'
1397     }
1398     ],
1399     [
1400     'Cha',
1401     {
1402     desc => 'The player\'s charisma will rise by the given value if he chooses this class. (Negative values make charisma fall)',
1403     name => 'charisma',
1404     type => 'int'
1405     }
1406     ]
1407     ]
1408     ]
1409     ]
1410     },
1411 root 1.3 Cloak => {
1412 root 1.7 attr => [
1413     [
1414     'magic',
1415     {
1416     desc => '<magic bonus> works just like ac, except that it can be improved by "scrolls of Enchant Armour" or reduced by acid. It is less useful than direct armour-class bonus on the cloak. Important: <magic bonus> on cloaks has no effect if there is no <armour class> set. It only works in combination with <armour class>.',
1417     name => 'magic bonus',
1418     type => 'int'
1419     }
1420     ]
1421     ],
1422 root 1.3 desc => 'Wearing a cloak, the object\'s stats will directly be inherited to the player. Cloaks usually add minor &lt;armour class&gt; and sometimes a bit of resistance.',
1423     import => [
1424 root 1.29 'Amulet'
1425 root 1.3 ],
1426 root 1.5 name => 'Cloak',
1427 root 1.3 use => 'Feel free to create your own special artifacts. However, it is very important that you keep your artifact in balance with existing maps.'
1428     },
1429     Clock => {
1430 root 1.7 attr => [
1431     [
1432     'msg',
1433     {
1434     desc => 'This text may describe the item',
1435     end => 'endmsg',
1436     name => 'description',
1437     type => 'text'
1438     }
1439     ]
1440     ],
1441 root 1.5 desc => 'Applying a clock, the time is displayed to the player.',
1442     name => 'Clock'
1443 root 1.1 },
1444 root 1.3 Container => {
1445 root 1.7 attr => [
1446     [
1447     'race',
1448     {
1449     desc => 'If set, the container will hold only certain types of objects. Possible choices for <container class> are: "gold and jewels", "arrows" and "keys". Unfortunately it is not easy to create new container classes, because items need a matching counterpiece-attribute to the <container class> before they can be put inside a container. This attribute ("race") is set only for the existing container classes.',
1450     name => 'container class',
1451     type => 'string'
1452     }
1453     ],
1454     [
1455     'slaying',
1456     {
1457     desc => 'If <key string> is set, only players with a special key of matching <key string> are able to open the container.',
1458     name => 'key string',
1459     type => 'string'
1460     }
1461     ],
1462     [
1463     'container',
1464     {
1465     desc => 'The container can hold a maximum total weight of the given value in gram. Note that this weight limit is calculated *after* the weight reduction (<reduce weight>) has been applied.',
1466     name => 'maximum weight',
1467     type => 'int'
1468     }
1469     ],
1470     [
1471     'Str',
1472     {
1473     desc => 'This value determines how much the weight of items is reduced in percent, when put inside the container. <reduce weight %> 0 means no reduction, <reduce weight %> 100 means items are weightless inside. Most default values are in the range of ten.',
1474     name => 'reduce weight %',
1475     type => 'int'
1476     }
1477     ],
1478     [
1479     'is_cauldron',
1480     {
1481     desc => 'If set, the container can be used as alchemy-cauldron. The player can put ingredients inside, close it, cast alchemy and if his formulae is true, he\'ll get what he longed for.',
1482     name => 'alchemy cauldron',
1483     type => 'bool'
1484     }
1485     ],
1486     [
1487     'unique',
1488     {
1489     desc => 'Unique items exist only one time on a server. If the item is taken, lost or destroyed - it\'s gone for good. All contents of a unique container are unique as well.',
1490     name => 'unique item',
1491     type => 'bool'
1492     }
1493     ],
1494     [
1495     'startequip',
1496     {
1497     desc => 'A godgiven item vanishes as soon as the player drops it to the ground.',
1498     name => 'godgiven item',
1499     type => 'bool'
1500     }
1501     ],
1502     [
1503     'other_arch',
1504     {
1505     desc => 'This is used for a certain kind of... "animation" when opening the container. Stick to the default arches here and you won\'t get into trouble.',
1506     name => 'animation arch',
1507     type => 'string'
1508     }
1509     ],
1510     [
1511     'msg',
1512     {
1513     desc => 'This text may contain a description of the container.',
1514     end => 'endmsg',
1515     name => 'description',
1516     type => 'text'
1517     }
1518     ]
1519     ],
1520 root 1.3 desc => 'A player can put (certain kinds of) items in the container. The overall weight of items is reduced when put inside a container, depending on the settings. <br><br> A special feature of containers is the "cauldron", capable of mixing alchemical receipes.',
1521 root 1.5 name => 'Container',
1522 root 1.3 use => 'Note on chests - There are two types of chests: <UL> <LI> First the random treasure chests - Those are NOT containers (but object type Treasure), they create random treasures when applied. Archetype name is "chest". <LI> Second there are the permanent chests - Those are containers, they can be opened and closed again. Archetype name is "chest_2". </UL>'
1523     },
1524     Converter => {
1525 root 1.7 attr => [
1526     [
1527     'no_pick',
1528     {
1529     type => 'fixed',
1530     value => 1
1531     }
1532     ],
1533     [
1534     'slaying',
1535     {
1536     desc => '<cost arch> is the name of the archetype the player has to put on the converter, as payment.',
1537     name => 'cost arch',
1538     type => 'string'
1539     }
1540     ],
1541     [
1542     'food',
1543     {
1544     desc => 'The player has to put <cost number> items of <cost arch> on the converter, in order to get <receive number> items of <receive arch>.',
1545     name => 'cost number',
1546     type => 'int'
1547     }
1548     ],
1549     [
1550     'other_arch',
1551     {
1552 root 1.8 desc => '<receive arch> is the name of the archetype to convert into. This field is ignored if the converter has items in inventory. In this case one of the inventory items is duplicated. The duplicated item is randomly chosen from all items present.',
1553 root 1.7 name => 'receive arch',
1554     type => 'string'
1555     }
1556     ],
1557     [
1558     'sp',
1559     {
1560     desc => 'The player has to put <cost number> items of <cost arch> on the converter, in order to get <receive number> items of <receive arch>.',
1561     name => 'receive number',
1562     type => 'int'
1563     }
1564     ],
1565     [
1566     'msg',
1567     {
1568     desc => 'This text may contain a description of the converter.',
1569     end => 'endmsg',
1570     name => 'description',
1571     type => 'text'
1572     }
1573 elmex 1.46 ],
1574     [
1575 elmex 1.47 'precious',
1576 elmex 1.46 {
1577 elmex 1.47 desc => 'If the converter has this flag set the generated items will be flagged as unpaid. Useful if you want to make a converter in a shop. (For instance for \'dragon scale\' to \'dragon shield\' converters in some armour shops.)',
1578     name => 'output unpaid',
1579 elmex 1.46 type => 'bool'
1580     }
1581 root 1.7 ]
1582     ],
1583 root 1.3 desc => 'Converters are like "exchange tables". When the player drops a specific type of items, they get converted into other items, at a predefined exchange-ratio.',
1584     ignore => [
1585     'value',
1586     'nrof',
1587     'name_pl',
1588     'no_pick',
1589 elmex 1.47 'unpaid',
1590 root 1.3 'title'
1591     ],
1592 root 1.5 name => 'Converter',
1593 root 1.3 use => 'Converters are better than shopping with doormats, because the converters never get sold out. For some items like food or jewels those "exchange tables" are really nice, while for the more important stuff like potions converters should not exist. <br><br> VERY IMPORTANT: Be careful with the exchange-ratio! When you drop items on a converter, the stuff you get must be of equal or lesser value than before! (Except if you are using "rare" items like dragonscales for payment). The code will not check if your ratio is sane, so the player could gain infinite wealth by using your converter.'
1594     },
1595     Creator => {
1596 root 1.7 attr => [
1597     [
1598     'no_pick',
1599     {
1600     type => 'fixed',
1601     value => 1
1602     }
1603     ],
1604     [
1605     'other_arch',
1606     {
1607 root 1.8 desc => 'This string defines the object that will be created. You can choose any of the existing arches. This field is ignored if the creator has items in inventory. In this case one of the inventory items is duplicated. The duplicated item is randomly chosen from all items present.',
1608 root 1.7 name => 'create arch',
1609     type => 'string'
1610     }
1611     ],
1612     [
1613     'connected',
1614     {
1615     desc => 'Whenever the connection value is activated, the creator gets triggered.',
1616     name => 'connection',
1617 root 1.50 type => 'string'
1618 root 1.7 }
1619     ],
1620     [
1621 elmex 1.21 'activate_on_push',
1622     {
1623     desc => 'Whether the teleporter should only be activated on push.',
1624 root 1.42 name => 'activate on push',
1625 elmex 1.21 type => 'bool'
1626     }
1627     ],
1628     [
1629     'activate_on_release',
1630     {
1631     desc => 'Whether the teleporter should only be activated on release.',
1632 root 1.42 name => 'activate on release',
1633 elmex 1.21 type => 'bool'
1634     }
1635     ],
1636     [
1637 root 1.7 'lifesave',
1638     {
1639 root 1.61 desc => 'If <unlimited uses> is set, the creator will work infinitely, regardless of the value in <number of uses>.',
1640     name => 'unlimited uses',
1641 root 1.7 type => 'bool'
1642     }
1643     ],
1644     [
1645 elmex 1.25 'speed',
1646     {
1647     desc => 'When this field is set the creator will periodically create stuff (and will still do so when the connection is triggered). A value of 1 means roughly 8 times a second.',
1648     name => 'speed',
1649     type => 'float'
1650     }
1651     ],
1652     [
1653 root 1.7 'hp',
1654     {
1655     desc => 'The creator can be triggered <number of uses> times, thus creating that many objects, before it dissappears. Default is <number of uses> 1 (-> one-time usage).',
1656     name => 'number of uses',
1657     type => 'int'
1658     }
1659     ],
1660     [
1661     'slaying',
1662     {
1663 root 1.8 desc => 'The created object will bear the name and title specified in <name of creation>. If nothing is set, the standard name and title of the archetype is used.',
1664 root 1.7 name => 'name of creation',
1665     type => 'string'
1666     }
1667     ],
1668     [
1669     'level',
1670     {
1671     desc => 'The created object will be of that level. If zero/unset, the standard level of the archetype is used.',
1672     name => 'level of creation',
1673     type => 'int'
1674     }
1675     ]
1676     ],
1677 elmex 1.25 desc => 'A creator is an object which creates another object when it is triggered. The child object can be anything. Creators are VERY useful for all kinds of map-mechanisms. They can even periodically create things.',
1678 root 1.3 ignore => [
1679     $IGNORE_LIST{system_object}
1680     ],
1681 root 1.5 name => 'Creator',
1682 root 1.3 use => 'Don\'t hesitate to hide your creators under the floor. The created items will still always appear ontop of the floor.'
1683     },
1684     Detector => {
1685 root 1.7 attr => [
1686     [
1687     'no_pick',
1688     {
1689     type => 'fixed',
1690     value => 1
1691     }
1692     ],
1693     [
1694     'slaying',
1695     {
1696     desc => '<match name> specifies the name of the object we are looking for. Actually it does also check for the <key string> in key-objects, but for this case inventory checkers are often more powerful to use.',
1697     name => 'match name',
1698     type => 'string'
1699     }
1700     ],
1701     [
1702     'connected',
1703     {
1704     desc => 'When the detector is triggered, all objects with the same connection value get activated.',
1705     name => 'connection',
1706 root 1.50 type => 'string'
1707 root 1.7 }
1708     ],
1709     [
1710     'speed',
1711     {
1712     desc => 'This value defines the time between two detector-checks. If you want the detector to behave almost like pedestals/buttons, set speed rather high, like <detection speed> 1.0.',
1713     name => 'detection speed',
1714     type => 'float'
1715     }
1716 root 1.17 ],
1717     [
1718     'speed_left',
1719     {
1720     desc => 'The speed left to the object. On every tick, if this value is higher than 0, the object acts/triggers/moves etc. and the value gets decremented by 1. Otherwise, it is incremented by <speed> on every tick.',
1721     name => 'speed left',
1722     type => 'float'
1723     }
1724     ],
1725     [
1726     'speed_left',
1727     {
1728     desc => 'The speed left. This value is incremented by <speed> on every tick. If it is larger than 0, the detector checks, and the speed is decremented by 1.',
1729     name => 'speed left',
1730     type => 'float'
1731     }
1732 root 1.7 ]
1733     ],
1734 root 1.56 desc => 'Detectors work quite much like inv. checkers/pedestals: If the detector finds a specific object, it toggles its connected value. <br><br> What is "unique" about them, compared to inv. checkers/ pedestals? - First, detectors check their square for a match periodically, not instantly, so generate much higher server load Second, detectors check directly for object names. Third, detectors do not check the inventory of players/monsters.',
1735 root 1.3 ignore => [
1736     $IGNORE_LIST{system_object}
1737     ],
1738 root 1.5 name => 'Detector',
1739 root 1.56 use => 'Best avoid this type at all costs, use a pedestal instead.'
1740 root 1.3 },
1741     Director => {
1742 root 1.7 attr => [
1743     [
1744     'sp',
1745     {
1746     desc => 'Projectiles will leave the director flying in the selected <direction>. A director with direction <none> simply stops projectiles. (The latter works out a bit strange for some spells).',
1747     name => 'direction',
1748     type => 'list',
1749     value => $LIST{direction}
1750     }
1751     ],
1752     [
1753 root 1.14 'move_on',
1754 root 1.7 {
1755 root 1.14 desc => 'Which movement types automatically (as opposed to manually) activate this object.',
1756 root 1.58 name => 'movement on',
1757 elmex 1.26 type => 'movement_type'
1758 root 1.7 }
1759     ]
1760     ],
1761 root 1.3 desc => 'Directors change the direction of spell objects and other projectiles that fly past. Unlike spinners, directors always move objects in the same direction. It does not make a difference from what angle you shoot into it.<br> Directors are visible per default.',
1762     ignore => [
1763     $IGNORE_LIST{non_pickable}
1764     ],
1765 root 1.5 name => 'Director',
1766 root 1.3 use => 'Directors are rarely used in maps. Sometimes they are placed to change the direction of spells coming out of magic walls, "channeling" spell-projectiles in some direction. When doing this, <B>never place directors facing each other with magic walls fireing into them!</B> The spell-projectiles bouncing between the directors would accumulate to huge numbers and at some point slow down the server by eating memory- and CPU-time. <br><br> You\'d better not place directors in monster vs. player combat areas too much, because that freaks out wizard-type players.'
1767     },
1768     Disease => {
1769 root 1.7 attr => [
1770     [
1771     'invisible',
1772     {
1773     type => 'fixed',
1774     value => 1
1775     }
1776     ],
1777     [
1778     'level',
1779     {
1780     desc => 'The <plaque level> is proportional to the disease\'s deadliness. This mainly reflects in the <damage>. It has no effect on most other symptoms. Neverthless, it is a very important value for all damage-inflicting diseases.',
1781     name => 'plaque level',
1782     type => 'int'
1783     }
1784     ],
1785     [
1786     'race',
1787     {
1788     desc => 'The disease will only infect creatures of the specified <race>. "<race> *" means every creature can be infected.',
1789     name => 'infect race',
1790     type => 'string'
1791     }
1792     ],
1793     [
1794     'ac',
1795     {
1796     desc => 'Every time the disease "moves" the severity of the symptoms are increased by <progressiveness>/100. (severity = 1 + (accumlated progression)/100)',
1797     name => 'progressiveness',
1798     type => 'int'
1799     }
1800     ],
1801     [
1802     'msg',
1803     {
1804     desc => 'This text is displayed to the player every time the symptoms strike.',
1805     end => 'endmsg',
1806     name => 'message',
1807     type => 'text'
1808     }
1809     ]
1810     ],
1811 root 1.36 desc => 'Diseases are an intersting form of spellcraft in Deliantra. Once casted, they can spread out and infect creatures in a large area. Being infected can have various effects, from amusing farts to horrible damage - almost everything is possible.',
1812 root 1.3 ignore => [
1813     $IGNORE_LIST{system_object}
1814     ],
1815 root 1.5 name => 'Disease',
1816 root 1.4 section => [
1817     [
1818     'spreading',
1819 root 1.7 [
1820     [
1821     'wc',
1822     {
1823     desc => 'The <infectiosness> defines the chance of new creatures getting infected. If you set this too high, the disease is very likely to be too effective. <infectiosness>/127 is the chance of someone in range catching it.',
1824     name => 'infectiosness',
1825     type => 'int'
1826     }
1827     ],
1828     [
1829     'last_grace',
1830     {
1831     desc => 'The <attenuation> value reduces the diseases\' <infectiosness> everytime it infects someone new. This limits how many generations a disease can propagate.',
1832     name => 'attenuation',
1833     type => 'int'
1834     }
1835     ],
1836     [
1837     'magic',
1838     {
1839     desc => '<infection range> sets the range at which infection may occur. If positive, the <infection range> is level dependant - If negative, it is not: E.g. "<infection range> -6" means creatures can be infected in six square range, and <plaque level> doesn\'t modify that.',
1840     name => 'infection range',
1841     type => 'int'
1842     }
1843     ],
1844     [
1845     'maxhp',
1846     {
1847     desc => '<persistence> defines how long the disease can persist OUTSIDE a host. The disease can "move" <persistence> times outside a host before it vanishes. A negative value means the disease lasts for permanent (which is only recommended to use in maps without monsters).',
1848     name => 'persistence',
1849     type => 'int'
1850     }
1851     ],
1852     [
1853     'maxgrace',
1854     {
1855     desc => 'The disease will last in the host for <curing duration> "disease moves" (Assuming the host survives and doesn\'t use a curing spell). After this period the disease is naturally cured, which provides the host with immunity from this particular disease of lower or equal level. A negative value means the disease can never be cured naturally. Note that this value can be further modulated by spell-parameters, if the disease is registered as spell in the code. Due to that, most default diseases take a lot longer to cure than it seems.',
1856     name => 'curing duration',
1857     type => 'int'
1858     }
1859     ],
1860     [
1861     'speed',
1862     {
1863     desc => 'The <speed> of the disease determines how fast the disease will "move", thus how fast the symptoms strike the host.',
1864     name => 'moving speed',
1865     type => 'float'
1866     }
1867 root 1.17 ],
1868     [
1869     'speed_left',
1870     {
1871     desc => 'The speed left to the object. On every tick, if this value is higher than 0, the object acts/triggers/moves etc. and the value gets decremented by 1. Otherwise, it is incremented by <speed> on every tick.',
1872     name => 'speed left',
1873     type => 'float'
1874     }
1875 root 1.7 ]
1876     ]
1877     ],
1878     [
1879     'symptoms',
1880     [
1881     [
1882     'attacktype',
1883     {
1884     desc => 'The disease will attack the host with the given <attacktype>. Godpower attacktype is commonly used for "unresistable" diseases.',
1885     name => 'attacktype',
1886     type => 'bitmask',
1887     value => $BITMASK{attacktype}
1888     }
1889     ],
1890     [
1891     'dam',
1892     {
1893     desc => 'A disease with a positive <damage> value will strike the player for that amount of damage every time the symptoms occur. A negative <damage> value produces %-based damage: "<damage> -10" means the player\'s health is reduced by 10% every time the symptoms strike. Diseases with %-based damage can be dangerous - but not deadly - for players of all levels.',
1894     name => 'damage',
1895     type => 'int'
1896     }
1897     ],
1898     [
1899     'other_arch',
1900     {
1901     desc => 'If set, the specified arch is created and dropped every time the symptoms strike. This can be various things: farts, body pieces, eggs ... Even monsters can be created that way. You could also make a disease where some exotic stuff like money/gems is created.',
1902     name => 'create arch',
1903     type => 'string'
1904     }
1905     ],
1906     [
1907     'last_sp',
1908     {
1909     desc => 'If set, the disease imposes a <slowdown penalty> while being infected. The player\'s speed is reduced by <slowdown penalty> % of normal value.',
1910     name => 'slowdown penalty',
1911     type => 'int'
1912     }
1913     ],
1914     [
1915     'exp',
1916     {
1917     desc => 'When the player manages to cure this disease (with a curing spell), he is awarded with <exp. for curing> experience.',
1918     name => 'exp. for curing',
1919     type => 'int'
1920     }
1921     ],
1922     [
1923     'maxsp',
1924     {
1925     desc => 'Every time the disease "moves", the player\'s mana is reduced by the value of <mana depletion>. For negative values, a %-based amount is taken.',
1926     name => 'mana depletion',
1927     type => 'int'
1928     }
1929     ],
1930     [
1931     'last_eat',
1932     {
1933     desc => 'Every time the disease "moves", the player\'s food is reduced by the value of <food depletion>. For negative values, a %-based amount is taken.',
1934     name => 'food depletion',
1935     type => 'int'
1936     }
1937     ],
1938     [
1939     'hp',
1940     {
1941     desc => 'This value increases the player\'s healing rate. Negative values decrease it.',
1942     name => 'health regen.',
1943     type => 'int'
1944     }
1945     ],
1946     [
1947     'sp',
1948     {
1949     desc => 'This value increases the player\'s rate of mana regeneration. Negative values decrease it.',
1950     name => 'mana regen.',
1951     type => 'int'
1952     }
1953     ]
1954     ]
1955     ],
1956     [
1957     'disability',
1958     [
1959     [
1960     'Str',
1961     {
1962     desc => 'The player\'s strength will rise by the given value while being infected. (Negative values make strength fall)',
1963     name => 'strength',
1964     type => 'int'
1965     }
1966     ],
1967     [
1968     'Dex',
1969     {
1970     desc => 'The player\'s dexterity will rise by the given value while being infected. (Negative values make dexterity fall)',
1971     name => 'dexterity',
1972     type => 'int'
1973     }
1974     ],
1975     [
1976     'Con',
1977     {
1978     desc => 'The player\'s constitution will rise by the given value while being infected. (Negative values make constitution fall)',
1979     name => 'constitution',
1980     type => 'int'
1981     }
1982     ],
1983     [
1984     'Int',
1985     {
1986     desc => 'The player\'s intelligence will rise by the given value while being infected. (Negative values make intelligence fall)',
1987     name => 'intelligence',
1988     type => 'int'
1989     }
1990     ],
1991     [
1992     'Pow',
1993     {
1994     desc => 'The player\'s power will rise by the given value while being infected. (Negative values make power fall)',
1995     name => 'power',
1996     type => 'int'
1997     }
1998     ],
1999     [
2000     'Wis',
2001     {
2002     desc => 'The player\'s wisdom will rise by the given value while being infected. (Negative values make wisdom fall)',
2003     name => 'wisdom',
2004     type => 'int'
2005     }
2006     ],
2007     [
2008     'Cha',
2009     {
2010     desc => 'The player\'s charisma will rise by the given value while being infected. (Negative values make charisma fall)',
2011     name => 'charisma',
2012     type => 'int'
2013     }
2014     ]
2015     ]
2016     ]
2017     ],
2018     use => 'Diseases are extremely flexible and usable in a many ways. So far they are mostly used for causing bad, unwanted effects. You could just as well create a disease which helps the player (recharging mana for example). Infection with a "positive disease" could even be a quest reward.'
2019     },
2020 root 1.9 Door => {
2021     attr => [
2022     [
2023     'no_pick',
2024     {
2025     type => 'fixed',
2026     value => 1
2027     }
2028     ],
2029     [
2030     'alive',
2031     {
2032     type => 'fixed',
2033     value => 1
2034     }
2035     ],
2036     [
2037 root 1.14 'move_block',
2038 root 1.9 {
2039 root 1.14 desc => 'Objects using these movement types cannot move over this space.',
2040     name => 'blocked movement',
2041 elmex 1.26 type => 'movement_type'
2042 root 1.14 }
2043     ],
2044     [
2045     'move_allow',
2046     {
2047     desc => 'Objects using these movement types are allowed to move over this space. Takes precedence over \'blocked movements\'.',
2048     name => 'allowed movement',
2049 elmex 1.26 type => 'movement_type'
2050 root 1.14 }
2051     ],
2052     [
2053     'move_slow',
2054     {
2055     desc => 'The types of movement that should by slowed down by the \'slow movement penalty\'.',
2056     name => 'slowed movement',
2057 elmex 1.26 type => 'movement_type'
2058 root 1.14 }
2059     ],
2060     [
2061     'move_slow_penalty',
2062     {
2063     desc => 'If <slow movement> is set to a value greater zero, all creatures matching \'slow move\' will be slower than normal on this spot. <slow movement> 1 - rough terrain <slow movement> 2 - very rough terrain ... <slow movement> 5 - default for deep swamp ... <slow movement> 7 - spider web (sticky as hell)',
2064     name => 'slow movement penalty',
2065     type => 'int'
2066 root 1.9 }
2067     ],
2068     [
2069     'hp',
2070     {
2071     desc => 'The more <hitpoints> the door has, the longer it takes to be broken.',
2072     name => 'hitpoints',
2073     type => 'int'
2074     }
2075     ],
2076     [
2077     'ac',
2078     {
2079     desc => 'Doors of high <armour class> are less likely to get hit. <armour class> can be considered the "counterpiece" to <weapon class>.',
2080     name => 'armour class',
2081     type => 'int'
2082     }
2083     ],
2084     [
2085     'other_arch',
2086     {
2087     desc => 'This string defines the object that will be created when the door was defeated.',
2088     name => 'drop arch',
2089     type => 'string'
2090     }
2091     ],
2092     [
2093     'randomitems',
2094     {
2095     desc => 'This entry determines what kind of traps will appear in the door.',
2096     name => 'treasurelist',
2097     type => 'treasurelist'
2098     }
2099 root 1.28 ],
2100     [
2101     'treasure_env',
2102     {
2103     desc => 'Set this flag to move treasure items created into the environment (map) instead of putting them into the object.',
2104     name => 'treasure in env',
2105     type => 'bool'
2106     }
2107 root 1.9 ]
2108     ],
2109 root 1.64 desc => 'A door can be opened with any normal key. It also can be broken by attacking it, and it can be defeated with the lockpicking skill. If a door is defeated, horizontally and vertically adjacent doors are automatically removed.',
2110 root 1.9 ignore => [
2111     $IGNORE_LIST{non_pickable}
2112     ],
2113     name => 'Door'
2114     },
2115 root 1.7 Duplicator => {
2116     attr => [
2117     [
2118     'other_arch',
2119 root 1.4 {
2120 elmex 1.22 desc => 'Only objects of matching archtype, lying ontop of the duplicator will be duplicated, multiplied or removed. All other objects will be ignored.',
2121 root 1.7 name => 'target arch',
2122     type => 'string'
2123 root 1.4 }
2124     ],
2125     [
2126 root 1.7 'level',
2127 root 1.4 {
2128 root 1.7 desc => 'The number of items in the target pile will be multiplied by the <multiply factor>. If it is set to zero, all target objects will be destroyed.',
2129     name => 'multiply factor',
2130     type => 'int'
2131 root 1.4 }
2132     ],
2133     [
2134 root 1.7 'connected',
2135 root 1.4 {
2136 root 1.7 desc => 'An activator (lever, altar, button, etc) with matching connection value is able to trigger this duplicator. Be very careful that players cannot abuse it to create endless amounts of money or other valuable stuff!',
2137     name => 'connection',
2138 root 1.50 type => 'string'
2139 root 1.4 }
2140 elmex 1.21 ],
2141     [
2142     'activate_on_push',
2143     {
2144     desc => 'Whether the teleporter should only be activated on push.',
2145 root 1.42 name => 'activate on push',
2146 elmex 1.21 type => 'bool'
2147     }
2148     ],
2149     [
2150     'activate_on_release',
2151     {
2152     desc => 'Whether the teleporter should only be activated on release.',
2153 root 1.42 name => 'activate on release',
2154 elmex 1.21 type => 'bool'
2155     }
2156 root 1.4 ]
2157     ],
2158 root 1.3 desc => 'When activated, a duplicator can duplicate, multiply or destroy a pile of objects which lies somewhere on top of the duplicator. The duplicator has one arch name specified as &lt;target arch&gt;, and only objects of this archetype can be affected.<br> It will multiply the number of items in the pile, by the &lt;multiply factor&gt;. If the latter is set to zero, it will destroy objects.',
2159     ignore => [
2160     $IGNORE_LIST{system_object}
2161     ],
2162 root 1.5 name => 'Duplicator',
2163 root 1.3 use => 'I hope it is clear that one must be very cautious when inserting a duplicator anywhere with &lt;multiply factor&gt; greater than one. It is designed to be used for betting mechanisms only (bet -&gt; win/loose). It is <b>not acceptable</b> to allow duplication of anything other than coins, gold and jewels. Besides, it is very important that the chance to loose the input matches the chance to earn winnings.<br> A duplicator with &lt;multiply factor&gt; 3 for example should have a loosing rate of 2/3 = 67%.'
2164     },
2165 root 1.10 'Event Connector' => {
2166 root 1.42 desc => 'Event connectors link specific events that happen to objects to a crossfire plug-in. They are not used at all in Deliantra.',
2167 root 1.10 name => 'Event Connector'
2168     },
2169 root 1.3 Exit => {
2170 root 1.7 attr => [
2171     [
2172     'slaying',
2173     {
2174     desc => 'The exit path defines the map that the player is transferred to. You can enter an absolute path, beginning with \'/\' (for example "/peterm/FireTemple/fire1"). It can also be a relative path, not beginning with \'/\' (On the map "/peterm/FireTemple/Fire2" for example I could use the relative path "Fire1"). Use relative paths whenever possible! Note that upper/lower case must always be set correctly. However, please use lower case only. It is well possible to have an exit pointing to the same map that the exit is on. If slaying is not set in an exit, the player will see a message like "the exit is closed".',
2175     name => 'exit path',
2176     type => 'string'
2177     }
2178     ],
2179     [
2180     'hp',
2181     {
2182     desc => 'The exit destinations define the (x, y)-coordinates where the exit leads to. If both are set to zero, the player will be transferred to the "default enter location" of the destined map. The latter can be set in the map- properties as "Enter X/Y". Though, please DO NOT use that. It turned out to be a source for numerous map-bugs.',
2183     name => 'destination X',
2184     type => 'int'
2185     }
2186     ],
2187     [
2188     'sp',
2189     {
2190     desc => 'The exit destinations define the (x, y)-coordinates where the exit leads to. If both are set to zero, the player will be transferred to the "default enter location" of the destined map. The latter can be set in the map- properties as "Enter X/Y". Though, please DO NOT use that. It turned out to be a source for numerous map-bugs.',
2191     name => 'destination Y',
2192     type => 'int'
2193     }
2194     ],
2195     [
2196 root 1.14 'move_on',
2197 root 1.7 {
2198 root 1.14 desc => 'Which movement types automatically (as opposed to manually) activate this object.',
2199 root 1.58 name => 'movement on',
2200 elmex 1.26 type => 'movement_type'
2201 root 1.7 }
2202     ],
2203     [
2204     'msg',
2205     {
2206     desc => 'If set, this message will be displayed to the player when he applies the exit. This is quite useful to throw in some "role-play feeling": "As you enter the dark cave you hear the sound of rustling dragonscales...". Well, my english is poor, but you get the point. =)',
2207     end => 'endmsg',
2208     name => 'exit message',
2209     type => 'text'
2210     }
2211     ],
2212     [
2213 root 1.30 'damned',
2214 root 1.7 {
2215 root 1.31 desc => 'If set, then players using this exit will have their savebed position set to the destination of the exit when passing through.',
2216 root 1.30 name => 'set savebed',
2217 root 1.7 type => 'bool'
2218     }
2219     ]
2220     ],
2221 root 1.3 desc => 'When the player applies an exit, he is transferred to a different location. (Monsters cannot use exits.) Depending on how it is set, the player applies the exit just by walking into it, or by pressing &lt;a&gt;pply when standing on the exit.',
2222     ignore => [
2223     $IGNORE_LIST{non_pickable}
2224     ],
2225 root 1.5 name => 'Exit',
2226 root 1.3 use => 'If you want to have an invisible exit, set &lt;invisible&gt; (, of course &lt;apply by walking&gt;), and put it *under* the floor. Otherwise it could be detected with the show_invisible spell. <br><br> You can be quite creative with the outlook of secret exits (their "face"). Don\'t forget to give the player relyable hints about them though.'
2227     },
2228     Flesh => {
2229 root 1.7 attr => [
2230     [
2231     'food',
2232     {
2233     desc => 'The player\'s stomache will get filled with this amount of foodpoints. The player\'s health will increase by <foodpoints>/50 hp.',
2234     name => 'foodpoints',
2235     type => 'int'
2236     }
2237     ],
2238     [
2239     'level',
2240     {
2241     desc => 'The <flesh level> is not visible to the players and it affects only dragon players. Normally this value reflects the level of the monster from which the flesh item originates. Dragon players always search for flesh of highest level possible, because it bears the best chance to gain high resistances.',
2242     name => 'flesh level',
2243     type => 'int'
2244     }
2245     ],
2246     [
2247     'startequip',
2248     {
2249     desc => 'A godgiven item vanishes as soon as the player drops it to the ground.',
2250     name => 'godgiven item',
2251     type => 'bool'
2252     }
2253     ],
2254     [
2255     'msg',
2256     {
2257     desc => 'This text may describe the item.',
2258     end => 'endmsg',
2259     name => 'description',
2260     type => 'text'
2261     }
2262     ]
2263     ],
2264 root 1.17 desc => 'Just like with food, the player can fill his stomache and gain a little health by eating flesh-objects. <br> For dragon players, flesh plays a very special role though: If the flesh has resistances set, a dragon player has a chance to gain resistance in those categories. The only constraint to this process is the &lt;flesh level&gt;. Don\'t forget that flesh items with resistances have to be balanced according to map/monster difficulty.',
2265 root 1.5 name => 'Flesh',
2266 root 1.4 section => [
2267     [
2268     'resistance',
2269 root 1.7 [
2270     [
2271     'resist_physical',
2272     {
2273     desc => 'Resistances on flesh items make them more durable against spellcraft of the appropriate kind. It also allows dragon players to eventually gain resistance by eating it. Usually resistance should only be set for flesh items in a monster\'s inventory.',
2274     name => 'resist physical %',
2275     type => 'int'
2276     }
2277     ],
2278     [
2279     'resist_magic',
2280     {
2281     desc => 'Resistances on flesh items make them more durable against spellcraft of the appropriate kind. It also allows dragon players to eventually gain resistance by eating it. Usually resistance should only be set for flesh items in a monster\'s inventory.',
2282     name => 'resist magic %',
2283     type => 'int'
2284     }
2285     ],
2286     [
2287     'resist_fire',
2288     {
2289     desc => 'Resistances on flesh items make them more durable against spellcraft of the appropriate kind. It also allows dragon players to eventually gain resistance by eating it. Usually resistance should only be set for flesh items in a monster\'s inventory.',
2290     name => 'resist fire %',
2291     type => 'int'
2292     }
2293     ],
2294     [
2295     'resist_electricity',
2296     {
2297     desc => 'Resistances on flesh items make them more durable against spellcraft of the appropriate kind. It also allows dragon players to eventually gain resistance by eating it. Usually resistance should only be set for flesh items in a monster\'s inventory.',
2298     name => 'resist electricity %',
2299     type => 'int'
2300     }
2301     ],
2302     [
2303     'resist_cold',
2304     {
2305     desc => 'Resistances on flesh items make them more durable against spellcraft of the appropriate kind. It also allows dragon players to eventually gain resistance by eating it. Usually resistance should only be set for flesh items in a monster\'s inventory.',
2306     name => 'resist cold %',
2307     type => 'int'
2308     }
2309     ],
2310     [
2311     'resist_confusion',
2312     {
2313     desc => 'Resistances on flesh items make them more durable against spellcraft of the appropriate kind. It also allows dragon players to eventually gain resistance by eating it. Usually resistance should only be set for flesh items in a monster\'s inventory.',
2314     name => 'resist confusion %',
2315     type => 'int'
2316     }
2317     ],
2318     [
2319     'resist_acid',
2320     {
2321     desc => 'Resistances on flesh items make them more durable against spellcraft of the appropriate kind. It also allows dragon players to eventually gain resistance by eating it. Usually resistance should only be set for flesh items in a monster\'s inventory.',
2322     name => 'resist acid %',
2323     type => 'int'
2324     }
2325     ],
2326     [
2327     'resist_drain',
2328     {
2329     desc => 'Resistances on flesh items make them more durable against spellcraft of the appropriate kind. It also allows dragon players to eventually gain resistance by eating it. Usually resistance should only be set for flesh items in a monster\'s inventory.',
2330     name => 'resist draining %',
2331     type => 'int'
2332     }
2333     ],
2334     [
2335     'resist_weaponmagic',
2336     {
2337     desc => 'Resistances on flesh items make them more durable against spellcraft of the appropriate kind. It also allows dragon players to eventually gain resistance by eating it. Usually resistance should only be set for flesh items in a monster\'s inventory.',
2338     name => 'resist weaponmagic %',
2339     type => 'int'
2340     }
2341     ],
2342     [
2343     'resist_ghosthit',
2344     {
2345     desc => 'Resistances on flesh items make them more durable against spellcraft of the appropriate kind. It also allows dragon players to eventually gain resistance by eating it. Usually resistance should only be set for flesh items in a monster\'s inventory.',
2346     name => 'resist ghosthit %',
2347     type => 'int'
2348     }
2349     ],
2350     [
2351     'resist_poison',
2352     {
2353     desc => 'Resistances on flesh items make them more durable against spellcraft of the appropriate kind. It also allows dragon players to eventually gain resistance by eating it. Usually resistance should only be set for flesh items in a monster\'s inventory.',
2354     name => 'resist poison %',
2355     type => 'int'
2356     }
2357     ],
2358     [
2359     'resist_slow',
2360     {
2361     desc => 'Resistances on flesh items make them more durable against spellcraft of the appropriate kind. It also allows dragon players to eventually gain resistance by eating it. Usually resistance should only be set for flesh items in a monster\'s inventory.',
2362     name => 'resist slow %',
2363     type => 'int'
2364     }
2365     ],
2366     [
2367     'resist_paralyze',
2368     {
2369     desc => 'Resistances on flesh items make them more durable against spellcraft of the appropriate kind. It also allows dragon players to eventually gain resistance by eating it. Usually resistance should only be set for flesh items in a monster\'s inventory.',
2370     name => 'resist paralyze %',
2371     type => 'int'
2372     }
2373     ],
2374     [
2375     'resist_fear',
2376     {
2377     desc => 'Resistances on flesh items make them more durable against spellcraft of the appropriate kind. It also allows dragon players to eventually gain resistance by eating it. Usually resistance should only be set for flesh items in a monster\'s inventory.',
2378     name => 'resist fear %',
2379     type => 'int'
2380     }
2381     ],
2382     [
2383     'resist_deplete',
2384     {
2385     desc => 'Resistances on flesh items make them more durable against spellcraft of the appropriate kind. It also allows dragon players to eventually gain resistance by eating it. Usually resistance should only be set for flesh items in a monster\'s inventory.',
2386     name => 'resist depletion %',
2387     type => 'int'
2388     }
2389     ],
2390     [
2391     'resist_death',
2392     {
2393 elmex 1.33 desc => 'Resistances on flesh items make them more durable against spellcraft of the appropriate kind. It also allows dragon players to eventually gain resistance by eating it. Usually resistance should only be set for flesh items in a monster\'s inventory.',
2394 root 1.7 name => 'resist death-attack %',
2395     type => 'int'
2396     }
2397     ],
2398     [
2399     'resist_chaos',
2400     {
2401     desc => 'Resistances on flesh items make them more durable against spellcraft of the appropriate kind. It also allows dragon players to eventually gain resistance by eating it. Usually resistance should only be set for flesh items in a monster\'s inventory.',
2402     name => 'resist chaos %',
2403     type => 'int'
2404     }
2405     ],
2406     [
2407     'resist_blind',
2408     {
2409     desc => 'Resistances on flesh items make them more durable against spellcraft of the appropriate kind. It also allows dragon players to eventually gain resistance by eating it. Usually resistance should only be set for flesh items in a monster\'s inventory.',
2410     name => 'resist blinding %',
2411     type => 'int'
2412     }
2413     ]
2414     ]
2415 root 1.4 ]
2416     ],
2417 root 1.3 use => 'For dragon players, flesh items can be highly valuable. Note that many standard monsters carry flesh items from their &lt;treasurelist&gt;. These flesh items "inherit" resistances and level from the monster they belong to. When you add special flesh items to the inventory of a monster, this is not the case - so you have to set it manually. <br><br> Generally adding special flesh-treaties for dragon players is a great thing to do. Always consider that dragon players might really not be interested in that special piece of weapon or armour, so don\'t let the dragon-fellows miss out on the reward completely.'
2418     },
2419     Floor => {
2420 root 1.7 attr => [
2421     [
2422     'is_floor',
2423     {
2424     type => 'fixed',
2425     value => 1
2426     }
2427     ],
2428     [
2429     'no_pick',
2430     {
2431     type => 'fixed',
2432     value => 1
2433     }
2434     ],
2435     [
2436     'no_magic',
2437     {
2438     desc => 'If enabled, it is impossible for players to use (wizard-) spells on that spot.',
2439     name => 'no spells',
2440     type => 'bool'
2441     }
2442     ],
2443     [
2444     'damned',
2445     {
2446     desc => 'If enabled, it is impossible for players to use prayers on that spot. It also prevents players from saving.',
2447     name => 'no prayers',
2448     type => 'bool'
2449     }
2450     ],
2451     [
2452     'unique',
2453     {
2454 root 1.53 desc => 'Unique floor means that any items dropped on that spot will be saved beyond map reset. For permanent apartments, all floor tiles must be set <unique map>.',
2455 root 1.7 name => 'unique map',
2456     type => 'bool'
2457     }
2458     ],
2459     [
2460     'msg',
2461     {
2462     desc => 'This text may describe the object.',
2463     end => 'endmsg',
2464     name => 'description',
2465     type => 'text'
2466     }
2467     ]
2468     ],
2469 root 1.3 desc => 'Floor is a very basic thing whithout too much functionality. It\'s a floor - you stand on it.',
2470     ignore => [
2471     $IGNORE_LIST{non_pickable}
2472     ],
2473 root 1.5 name => 'Floor',
2474 root 1.4 section => [
2475     [
2476     'terrain',
2477 root 1.7 [
2478     [
2479 root 1.14 'move_block',
2480     {
2481     desc => 'Objects using these movement types cannot move over this space.',
2482     name => 'blocked movement',
2483 elmex 1.26 type => 'movement_type'
2484 root 1.14 }
2485     ],
2486     [
2487     'move_allow',
2488     {
2489     desc => 'Objects using these movement types are allowed to move over this space. Takes precedence over \'blocked movements\'.',
2490     name => 'allowed movement',
2491 elmex 1.26 type => 'movement_type'
2492 root 1.14 }
2493     ],
2494     [
2495     'move_slow',
2496     {
2497     desc => 'The types of movement that should by slowed down by the \'slow movement penalty\'.',
2498     name => 'slowed movement',
2499 elmex 1.26 type => 'movement_type'
2500 root 1.14 }
2501     ],
2502     [
2503     'move_slow_penalty',
2504 root 1.7 {
2505 root 1.14 desc => 'If <slow movement> is set to a value greater zero, all creatures matching \'slow move\' will be slower than normal on this spot. <slow movement> 1 - rough terrain <slow movement> 2 - very rough terrain ... <slow movement> 5 - default for deep swamp ... <slow movement> 7 - spider web (sticky as hell)',
2506     name => 'slow movement penalty',
2507 root 1.7 type => 'int'
2508     }
2509     ],
2510     [
2511     'is_wooded',
2512     {
2513     desc => 'This flag indicates this spot contains wood or high grass. Players with activated woodsman skill can move faster here.',
2514     name => 'wooded terrain',
2515     type => 'bool'
2516     }
2517     ],
2518     [
2519     'is_hilly',
2520     {
2521     desc => 'This flag indicates this spot contains hills or large rocks. Players with activated mountaineer skill can move faster here.',
2522     name => 'hilly terrain',
2523     type => 'bool'
2524     }
2525     ]
2526     ]
2527 root 1.4 ]
2528     ]
2529 root 1.3 },
2530     'Floor (Encounter)' => {
2531 root 1.7 attr => [
2532     [
2533     'is_floor',
2534     {
2535     type => 'fixed',
2536     value => 1
2537     }
2538     ],
2539     [
2540     'no_pick',
2541     {
2542     type => 'fixed',
2543     value => 1
2544     }
2545     ],
2546     [
2547     'no_magic',
2548     {
2549     desc => 'If enabled, it is impossible for players to use (wizard-) spells on that spot.',
2550     name => 'no spells',
2551     type => 'bool'
2552     }
2553     ],
2554     [
2555     'damned',
2556     {
2557     desc => 'If enabled, it is impossible for players to use prayers on that spot. It also prevents players from saving.',
2558     name => 'no prayers',
2559     type => 'bool'
2560     }
2561     ],
2562     [
2563     'unique',
2564     {
2565 root 1.53 desc => 'Unique floor means that any items dropped on that spot will be saved beyond map reset. For permanent apartments, all floor tiles must be set <unique map>.',
2566 root 1.7 name => 'unique map',
2567     type => 'bool'
2568     }
2569     ],
2570     [
2571     'msg',
2572     {
2573     desc => 'This text may describe the object.',
2574     end => 'endmsg',
2575     name => 'description',
2576     type => 'text'
2577     }
2578     ]
2579     ],
2580 root 1.3 desc => 'Encounter-Floor is pretty much the same as normal floor. Most outdoor floor/ground-arches are set to be "encounters". That is kind of a relict from former code: When walking over encounter-floor, players sometimes got beamed to little maps with monsters on them. Nowadays this feature is disabled - Hence encounter floor is not different from normal floor.',
2581     ignore => [
2582     $IGNORE_LIST{non_pickable}
2583 root 1.4 ],
2584 root 1.5 name => 'Floor (Encounter)',
2585 root 1.4 section => [
2586     [
2587     'terrain',
2588 root 1.7 [
2589     [
2590 root 1.14 'move_block',
2591     {
2592     desc => 'Objects using these movement types cannot move over this space.',
2593     name => 'blocked movement',
2594 elmex 1.26 type => 'movement_type'
2595 root 1.14 }
2596     ],
2597     [
2598     'move_allow',
2599 root 1.7 {
2600 root 1.14 desc => 'Objects using these movement types are allowed to move over this space. Takes precedence over \'blocked movements\'.',
2601     name => 'allowed movement',
2602 elmex 1.26 type => 'movement_type'
2603 root 1.14 }
2604     ],
2605     [
2606     'move_slow',
2607     {
2608     desc => 'The types of movement that should by slowed down by the \'slow movement penalty\'.',
2609     name => 'slowed movement',
2610 elmex 1.26 type => 'movement_type'
2611 root 1.14 }
2612     ],
2613     [
2614     'move_slow_penalty',
2615     {
2616     desc => 'If <slow movement> is set to a value greater zero, all creatures matching \'slow move\' will be slower than normal on this spot. <slow movement> 1 - rough terrain <slow movement> 2 - very rough terrain ... <slow movement> 5 - default for deep swamp ... <slow movement> 7 - spider web (sticky as hell)',
2617     name => 'slow movement penalty',
2618 root 1.7 type => 'int'
2619     }
2620     ],
2621     [
2622     'is_wooded',
2623     {
2624     desc => 'This flag indicates this spot contains wood or high grass. Players with activated woodsman skill can move faster here.',
2625     name => 'wooded terrain',
2626     type => 'bool'
2627     }
2628     ],
2629     [
2630     'is_hilly',
2631     {
2632     desc => 'This flag indicates this spot contains hills or large rocks. Players with activated mountaineer skill can move faster here.',
2633     name => 'hilly terrain',
2634     type => 'bool'
2635     }
2636     ]
2637     ]
2638 root 1.4 ]
2639 root 1.3 ]
2640     },
2641     Food => {
2642 root 1.7 attr => [
2643     [
2644     'food',
2645     {
2646     desc => 'The player\'s stomache will get filled with this amount of foodpoints. The player\'s health will increase by <foodpoints>/50 hp.',
2647     name => 'foodpoints',
2648     type => 'int'
2649     }
2650     ],
2651     [
2652     'startequip',
2653     {
2654     desc => 'A godgiven item vanishes as soon as the player drops it to the ground.',
2655     name => 'godgiven item',
2656     type => 'bool'
2657     }
2658     ]
2659     ],
2660 root 1.5 desc => 'By eating/drinking food-objects, the player can fill his stomache and gain a little health.',
2661     name => 'Food'
2662 root 1.1 },
2663 root 1.3 Gate => {
2664 root 1.7 attr => [
2665     [
2666     'no_pick',
2667     {
2668     type => 'fixed',
2669     value => 1
2670     }
2671     ],
2672     [
2673 elmex 1.20 'speed',
2674     {
2675     desc => 'The speed of the gate affects how fast it is closing/opening.',
2676     type => 'float'
2677     }
2678     ],
2679     [
2680 root 1.7 'connected',
2681     {
2682     desc => 'Whenever the inventory checker is triggered, all objects with identical <connection> value get activated. This only makes sense together with <blocking passage> disabled.',
2683     name => 'connection',
2684 root 1.50 type => 'string'
2685 root 1.7 }
2686     ],
2687     [
2688     'wc',
2689     {
2690     desc => 'The <position state> defines the position of the gate: Zero means completely open/down, the "number of animation-steps" (usually about 6 or 7) means completely closed/up state. I suggest you don\'t mess with this value - Leave the default in place.',
2691     name => 'position state',
2692     type => 'int'
2693     }
2694     ],
2695     [
2696 root 1.14 'move_block',
2697     {
2698     desc => 'Objects using these movement types cannot move over this space.',
2699     name => 'blocked movement',
2700 elmex 1.26 type => 'movement_type'
2701 root 1.14 }
2702     ],
2703     [
2704     'move_allow',
2705     {
2706     desc => 'Objects using these movement types are allowed to move over this space. Takes precedence over \'blocked movements\'.',
2707     name => 'allowed movement',
2708 elmex 1.26 type => 'movement_type'
2709 root 1.14 }
2710     ],
2711     [
2712     'move_slow',
2713 root 1.7 {
2714 root 1.14 desc => 'The types of movement that should by slowed down by the \'slow movement penalty\'.',
2715     name => 'slowed movement',
2716 elmex 1.26 type => 'movement_type'
2717 root 1.14 }
2718     ],
2719     [
2720     'move_slow_penalty',
2721     {
2722     desc => 'If <slow movement> is set to a value greater zero, all creatures matching \'slow move\' will be slower than normal on this spot. <slow movement> 1 - rough terrain <slow movement> 2 - very rough terrain ... <slow movement> 5 - default for deep swamp ... <slow movement> 7 - spider web (sticky as hell)',
2723     name => 'slow movement penalty',
2724     type => 'int'
2725 root 1.7 }
2726     ],
2727     [
2728     'no_magic',
2729     {
2730     desc => 'Restricting the use of spells to pass this gate. This has an effect only if <block view> is disabled.',
2731     name => 'restrict spells',
2732     type => 'bool'
2733     }
2734     ],
2735     [
2736     'damned',
2737     {
2738     desc => 'Restricting the use of prayers to pass this door. This has an effect only if <block view> is disabled.',
2739     name => 'restrict prayers',
2740     type => 'bool'
2741     }
2742     ]
2743     ],
2744 root 1.36 desc => 'Gates play an important role in Deliantra. Gates can be opened by activating a button/trigger, by speaking passwords (-> magic_ear) or carrying special key-objects (-> inventory checker). Unlike locked doors, gates can get shut again after a player has passed, which makes them more practical in many cases.',
2745 root 1.3 ignore => [
2746     $IGNORE_LIST{non_pickable}
2747     ],
2748 root 1.5 name => 'Gate',
2749 root 1.3 use => 'Use gates to divide your maps into seperated areas. After solving area A, the player gains access to area B, and so on. Make your maps more complex than "one-way".'
2750     },
2751     Girdle => {
2752 root 1.7 attr => [
2753     [
2754     'magic',
2755     {
2756     desc => '<magic bonus> works just like ac, except that it can be improved by "scrolls of Enchant Armour" or reduced by acid. It is less useful than direct armour-class bonus on the helmet. Important: <magic bonus> on girdles has no effect if there is no <armour class> set. Girdles shouldn\'t have <armour class>, thus <magic bonus> is pointless here.',
2757     name => 'magic bonus',
2758     type => 'int'
2759     }
2760     ]
2761     ],
2762     desc => 'Wearing a girdle, the object\'s stats will directly be inherited to the player. Girdles usually provide stats- or damage bonuses and no defense.',
2763     import => [
2764 root 1.29 'Amulet'
2765 root 1.7 ],
2766     name => 'Girdle',
2767     use => 'Feel free to create your own special artifacts. However, it is very important that you keep your artifact in balance with existing maps.'
2768     },
2769     Gloves => {
2770     attr => [
2771     [
2772     'magic',
2773     {
2774     desc => 'If the gloves provide <armour class>, <magic bonus> will increase it. If the gloves have <weapon class> instead, then <magic bonus> will increase that.',
2775     name => 'magic bonus',
2776     type => 'int'
2777     }
2778     ]
2779     ],
2780     desc => 'Wearing gloves, the object\'s stats will directly be inherited to the player. Gloves can add defense or damage bonuses.',
2781     import => [
2782 root 1.29 'Amulet'
2783 root 1.7 ],
2784     name => 'Gloves',
2785     use => 'Feel free to create your own special artifacts. However, it is very important that you keep your artifact in balance with existing maps.'
2786     },
2787     Handle => {
2788     attr => [
2789     [
2790     'no_pick',
2791     {
2792     type => 'fixed',
2793     value => 1
2794     }
2795     ],
2796     [
2797     'connected',
2798     {
2799     desc => 'Every time the handle is applied, all objects with the same <connection> value are activated.',
2800     name => 'connection',
2801 root 1.50 type => 'string'
2802 root 1.7 }
2803     ],
2804     [
2805     'msg',
2806     {
2807     desc => 'This text may describe the item. You can use this message to explain the handle\'s purpose to the player.',
2808     end => 'endmsg',
2809     name => 'description',
2810     type => 'text'
2811     }
2812     ]
2813     ],
2814     desc => 'A handle can be applied by players and (certain) monsters. Every time it is applied, the &lt;connection&gt; value is triggered.',
2815     ignore => [
2816     $IGNORE_LIST{non_pickable}
2817     ],
2818     name => 'Handle',
2819     use => 'Handles are commonly used to move gates. When placing your lever, don\'t forget that some monsters are able to apply it. The ability to apply levers is rare among monsters - but vampires can do it for example.'
2820     },
2821     'Handle Trigger' => {
2822     desc => 'Handle triggers are handles which reset after a short period of time. Every time it is either applied or reset, the &lt;connection&gt; value is triggered.',
2823     ignore => [
2824     $IGNORE_LIST{non_pickable}
2825     ],
2826     import => [
2827 root 1.29 'Handle'
2828 root 1.7 ],
2829     name => 'Handle Trigger',
2830     use => 'When you connect an ordinary handle to a gate, the gate normally remains opened after the first player passed. If you want to keep the gate shut, connecting it to a handle trigger is an easy solution.'
2831     },
2832     'Hazard Floor' => {
2833     attr => [
2834     [
2835     'is_floor',
2836     {
2837     type => 'fixed',
2838     value => 1
2839     }
2840     ],
2841     [
2842     'lifesave',
2843     {
2844     type => 'fixed',
2845     value => 1
2846     }
2847     ],
2848     [
2849 root 1.14 'move_on',
2850 root 1.7 {
2851 root 1.14 desc => 'Which movement types automatically (as opposed to manually) activate this object.',
2852 root 1.58 name => 'movement on',
2853 elmex 1.26 type => 'movement_type'
2854 root 1.7 }
2855     ],
2856     [
2857     'no_pick',
2858     {
2859     type => 'fixed',
2860     value => 1
2861     }
2862     ],
2863     [
2864     'attacktype',
2865     {
2866     desc => 'This attribute specifys the attacktypes that this floor uses to damage it\'s victims. Attacktypes are: physical, fire, cold.. etc. If you want a real tough hazard floor, add more than just one attacktype.',
2867     name => 'attacktype',
2868     type => 'bitmask',
2869     value => $BITMASK{attacktype}
2870     }
2871     ],
2872     [
2873     'dam',
2874     {
2875     desc => 'The <base damage> defines how much damage is inflicted to the victim per hit. The final damage is influenced by several other factors like the victim\'s resistance and level.',
2876     name => 'base damage',
2877     type => 'int'
2878     }
2879     ],
2880     [
2881     'wc',
2882     {
2883     desc => '<weapon class> improves the chance of hitting the victim. Lower values are better. Usually, hazard floors like lava are supposed to hit the victim all the time. Therefore, <weaponclass> should be set to something like -30.',
2884     name => 'weaponclass',
2885     type => 'int'
2886     }
2887     ],
2888     [
2889     'level',
2890     {
2891     desc => 'I guess this value is supposed to work similar to monster levels. But in fact, it does not seem to have an effect. Set any non-zero value to be on the safe side.',
2892     name => 'attack level',
2893     type => 'int'
2894     }
2895     ],
2896     [
2897     'no_magic',
2898     {
2899     desc => 'If enabled, it is impossible for players to use (wizard-) spells on that spot.',
2900     name => 'no spells',
2901     type => 'bool'
2902     }
2903     ],
2904     [
2905     'damned',
2906     {
2907     desc => 'If enabled, it is impossible for players to use prayers on that spot. It also prevents players from saving.',
2908     name => 'no prayers',
2909     type => 'bool'
2910     }
2911     ],
2912     [
2913     'unique',
2914     {
2915 root 1.53 desc => 'Unique floor means that any items dropped on that spot will be saved beyond map reset. For permanent apartments, all floor tiles must be set <unique map>.',
2916 root 1.7 name => 'unique map',
2917     type => 'bool'
2918     }
2919     ]
2920 root 1.3 ],
2921     desc => 'The best example for Hazard Floor is lava. It works like standard floor, but damages all creatures standing on it. Damage is taken in regular time intervals.',
2922     ignore => [
2923     $IGNORE_LIST{non_pickable}
2924     ],
2925 root 1.5 name => 'Hazard Floor',
2926 root 1.4 section => [
2927     [
2928     'terrain',
2929 root 1.7 [
2930     [
2931 root 1.14 'move_block',
2932     {
2933     desc => 'Objects using these movement types cannot move over this space.',
2934     name => 'blocked movement',
2935 elmex 1.26 type => 'movement_type'
2936 root 1.14 }
2937     ],
2938     [
2939     'move_allow',
2940 root 1.7 {
2941 root 1.14 desc => 'Objects using these movement types are allowed to move over this space. Takes precedence over \'blocked movements\'.',
2942     name => 'allowed movement',
2943 elmex 1.26 type => 'movement_type'
2944 root 1.14 }
2945     ],
2946     [
2947     'move_slow',
2948     {
2949     desc => 'The types of movement that should by slowed down by the \'slow movement penalty\'.',
2950     name => 'slowed movement',
2951 elmex 1.26 type => 'movement_type'
2952 root 1.14 }
2953     ],
2954     [
2955     'move_slow_penalty',
2956     {
2957     desc => 'If <slow movement> is set to a value greater zero, all creatures matching \'slow move\' will be slower than normal on this spot. <slow movement> 1 - rough terrain <slow movement> 2 - very rough terrain ... <slow movement> 5 - default for deep swamp ... <slow movement> 7 - spider web (sticky as hell)',
2958     name => 'slow movement penalty',
2959 root 1.7 type => 'int'
2960     }
2961     ],
2962     [
2963     'is_wooded',
2964     {
2965     desc => 'This flag indicates this spot contains wood or high grass. Players with activated woodsman skill can move faster here.',
2966     name => 'wooded terrain',
2967     type => 'bool'
2968     }
2969     ],
2970     [
2971     'is_hilly',
2972     {
2973     desc => 'This flag indicates this spot contains hills or large rocks. Players with activated mountaineer skill can move faster here.',
2974     name => 'hilly terrain',
2975     type => 'bool'
2976     }
2977     ]
2978     ]
2979 root 1.4 ]
2980     ],
2981 root 1.3 use => 'The default lava for example does minor damage. But you can turn it up so that your hazard floor poses a real threat.<br> Like magic walls, such floors add a permanent thrill to your map. You can use that to safely chase off too-weak players, or just to have something different.'
2982     },
2983     Helmet => {
2984 root 1.7 attr => [
2985     [
2986     'magic',
2987     {
2988     desc => '<magic bonus> works just like ac, except that it can be improved by "scrolls of Enchant Armour" or reduced by acid. It is less useful than direct armour-class bonus on the helmet. Important: <magic bonus> on helmets has no effect if there is no <armour class> set. It only works in combination with <armour class>. Crowns for instance typically provide no <amour class>.',
2989     name => 'magic bonus',
2990     type => 'int'
2991     }
2992     ]
2993     ],
2994 root 1.3 desc => 'Wearing a helmet, the object\'s stats will directly be inherited to the player. Normal helmets usually increase defense, while crowns add more special bonuses like stats/resistances paired with low defense.',
2995     import => [
2996 root 1.29 'Amulet'
2997 root 1.3 ],
2998 root 1.5 name => 'Helmet',
2999 root 1.3 use => 'Feel free to create your own special artifacts. However, it is very important that you keep your artifact in balance with existing maps.'
3000     },
3001     'Holy Altar' => {
3002 root 1.7 attr => [
3003     [
3004     'no_pick',
3005     {
3006     type => 'fixed',
3007     value => 1
3008     }
3009     ],
3010     [
3011     'other_arch',
3012     {
3013     desc => 'The altar belongs to the god of the given name. Possible options for <god name> are: Devourers, Lythander, Mostrai, Gaea, Ruggilli, Gnarg, Gorokh, Valriel and Sorig. If you want to have an unconsecrated altar, set <god name> 0 and eventually <reconsecrate level> 0.',
3014     name => 'god name',
3015     type => 'string'
3016     }
3017     ],
3018     [
3019     'level',
3020     {
3021 elmex 1.22 desc => 'To re-consecrate an altar, the player\'s wisdom level must be as high or higher than this value. In that way, some altars can not be re-consecrated, while other altars, like those in dungeons, could be. Altars located in temples should have at least <reconsecrate level> 120. Some characters might need those altars, they would be very unhappy to see them re-consecrated to another cult.',
3022 root 1.7 name => 'reconsecrate level',
3023     type => 'int'
3024     }
3025     ]
3026     ],
3027 root 1.55 desc => 'Holy Altars are altars for the various religions. Praying at a Holy_altar will make you a follower of that god, and if you already follow that god, you may get some extra bonus.',
3028 root 1.3 ignore => [
3029     $IGNORE_LIST{non_pickable}
3030 root 1.5 ],
3031     name => 'Holy Altar'
3032 root 1.3 },
3033     Horn => {
3034 root 1.7 attr => [
3035     [
3036     'sp',
3037     {
3038     desc => 'Sets the <spell> of the horn. Consider twice before handing out any horns to players, since they can be used endlessly without any mana cost! Horns with heal/ restoration/ protection spells, IF available, MUST be very very VERY hard to get!',
3039     name => 'spell',
3040     type => 'spell'
3041     }
3042     ],
3043     [
3044     'level',
3045     {
3046     desc => 'The casting level of the <spell> determines it\'s power. For attack spells, level should not be set too high.',
3047     name => 'casting level',
3048     type => 'int'
3049     }
3050     ],
3051     [
3052     'hp',
3053     {
3054     desc => 'This value represents the initial amount of spellpoints in the horn. Naturally, this is quite unimportant.',
3055     name => 'initial spellpoints',
3056     type => 'int'
3057     }
3058     ],
3059     [
3060     'maxhp',
3061     {
3062     desc => 'When the horn is fully charged up, it will hold this maximum amount of spellpoints. Make sure it is enough to cast the contained spell at least once. But don\'t set the value too high, as that might make the horn way too effective.',
3063     name => 'max. spellpoints',
3064     type => 'int'
3065     }
3066     ],
3067     [
3068     'startequip',
3069     {
3070     desc => 'A godgiven item vanishes as soon as the player drops it to the ground.',
3071     name => 'godgiven item',
3072     type => 'bool'
3073     }
3074     ],
3075     [
3076     'msg',
3077     {
3078     desc => 'This text may contain a description of the horn.',
3079     end => 'endmsg',
3080     name => 'description',
3081     type => 'text'
3082     }
3083     ]
3084     ],
3085 root 1.3 desc => 'Horns are very similar to rods. The difference is that horns regenerate spellpoints faster and thus are more valuable than rods. <br><br> A horn contains a spell. The player can use this spell by applying and "fireing" (blowing) the horn. Unlike wands/scrolls, horns can be used endlessly.',
3086     ignore => [
3087     'title'
3088     ],
3089 root 1.5 name => 'Horn',
3090 root 1.3 use => 'Horns are powerful due to their fast recharge rate. They should never contain high level attacking spells. Even curing/healing spells are almost too good on a horn.'
3091     },
3092     Inorganic => {
3093 root 1.7 attr => [
3094     [
3095     'is_dust',
3096     {
3097     name => 'is dust',
3098     type => 'bool'
3099     }
3100     ]
3101     ],
3102 root 1.4 desc => 'Inorganic materials are generally used as ingredients for alchemical receipes. By themselves, they have no special functionalities.',
3103 root 1.5 name => 'Inorganic',
3104 root 1.4 section => [
3105     [
3106     'resistance',
3107 root 1.7 [
3108     [
3109     'resist_physical',
3110     {
3111     name => 'resist physical %',
3112     type => 'int'
3113     }
3114     ],
3115     [
3116     'resist_magic',
3117     {
3118     name => 'resist magic %',
3119     type => 'int'
3120     }
3121     ],
3122     [
3123     'resist_fire',
3124     {
3125     name => 'resist fire %',
3126     type => 'int'
3127     }
3128     ],
3129     [
3130     'resist_electricity',
3131     {
3132     name => 'resist electricity %',
3133     type => 'int'
3134     }
3135     ],
3136     [
3137     'resist_cold',
3138     {
3139     name => 'resist cold %',
3140     type => 'int'
3141     }
3142     ],
3143     [
3144 elmex 1.33 'resist_confusion',
3145     {
3146     name => 'resist confusion %',
3147     type => 'int'
3148     }
3149     ],
3150     [
3151 root 1.7 'resist_acid',
3152     {
3153     name => 'resist acid %',
3154     type => 'int'
3155     }
3156     ],
3157     [
3158 elmex 1.33 'resist_drain',
3159     {
3160     name => 'resist draining %',
3161     type => 'int'
3162     }
3163     ],
3164     [
3165 root 1.7 'resist_weaponmagic',
3166     {
3167     name => 'resist weaponmagic %',
3168     type => 'int'
3169     }
3170     ],
3171     [
3172     'resist_ghosthit',
3173     {
3174     name => 'resist ghosthit %',
3175     type => 'int'
3176     }
3177     ],
3178     [
3179     'resist_poison',
3180     {
3181     name => 'resist poison %',
3182     type => 'int'
3183     }
3184     ],
3185     [
3186 elmex 1.33 'resist_slow',
3187     {
3188     name => 'resist slow %',
3189     type => 'int'
3190     }
3191     ],
3192     [
3193     'resist_paralyze',
3194     {
3195     name => 'resist paralyze %',
3196     type => 'int'
3197     }
3198     ],
3199     [
3200     'resist_fear',
3201     {
3202     name => 'resist fear %',
3203     type => 'int'
3204     }
3205     ],
3206     [
3207     'resist_deplete',
3208     {
3209     name => 'resist depletion %',
3210     type => 'int'
3211     }
3212     ],
3213     [
3214 root 1.7 'resist_death',
3215     {
3216     name => 'resist death-attack %',
3217     type => 'int'
3218     }
3219     ],
3220     [
3221     'resist_chaos',
3222     {
3223     name => 'resist chaos %',
3224     type => 'int'
3225     }
3226     ],
3227     [
3228 elmex 1.33 'resist_blind',
3229     {
3230     name => 'resist blinding %',
3231     type => 'int'
3232     }
3233     ],
3234     [
3235 root 1.7 'resist_holyword',
3236     {
3237     name => 'resist holy power %',
3238     type => 'int'
3239     }
3240 elmex 1.33 ],
3241     [
3242     'resist_godpower',
3243     {
3244     name => 'resist godpower %',
3245     type => 'int'
3246     }
3247 root 1.7 ]
3248     ]
3249 root 1.4 ]
3250     ]
3251 root 1.1 },
3252 root 1.54 Inscribable => {
3253     attr => [
3254     [
3255     'startequip',
3256     {
3257     desc => 'A godgiven item vanishes as soon as the player drops it to the ground.',
3258     name => 'godgiven item',
3259     type => 'bool'
3260     }
3261     ],
3262     [
3263     'unique',
3264     {
3265     desc => 'Unique items exist only one time on a server. If the item is taken, lost or destroyed - it\'s gone for good.',
3266     name => 'unique item',
3267     type => 'bool'
3268     }
3269     ],
3270     [
3271     'other_arch',
3272     {
3273     desc => 'This is the item created after being inscribed - scrolls are treated like spell scrolls, all else will have it\'s message replaced.',
3274     name => 'book/scroll arch',
3275     type => 'string'
3276     }
3277     ]
3278     ],
3279     desc => 'Inscribable Item - when inscribed, it becomes another object.',
3280     name => 'Inscribable'
3281     },
3282 root 1.3 'Inventory Checker' => {
3283 root 1.7 attr => [
3284     [
3285     'no_pick',
3286     {
3287     type => 'fixed',
3288     value => 1
3289     }
3290     ],
3291     [
3292     'slaying',
3293     {
3294     desc => 'This string specifies the object we are looking for: We have a match if the player does/don\'t carry a key object or a mark with identical <key string>. Note that key objects usually appear as "passports" in this context. A typical example is the city gate mechanism of scorn.',
3295     name => 'match key string',
3296     type => 'string'
3297     }
3298     ],
3299     [
3300     'race',
3301     {
3302     desc => 'This string specifies the object we are looking for: We have a match if the player does/don\'t carry an object of archtype <match arch name>.',
3303     name => 'match arch name',
3304     type => 'string'
3305     }
3306     ],
3307     [
3308     'hp',
3309     {
3310     desc => 'This value specifies the object we are looking for: We have a match if the player does/don\'t carry an object that is of type <match type>. Example: Set <match type> 15 (type 15 => weapon) and <blocking passage> enabled. Now you have an inv. checker blocking all players that carry any kind of melee weapon. To pass, a player is forced to leave behind all his weaponry... bad news for a warrior. ;)',
3311     name => 'match type',
3312     type => 'int'
3313     }
3314     ],
3315     [
3316     'last_sp',
3317     {
3318     desc => 'Enabled means having that object is a match. Disabled means not having that object is a match.',
3319     name => 'match = having',
3320     type => 'bool'
3321     }
3322     ],
3323     [
3324     'connected',
3325     {
3326     desc => 'Whenever the inventory checker is triggered, all objects with identical <connection> value get activated. This only makes sense together with <blocking passage> disabled.',
3327     name => 'connection',
3328 root 1.50 type => 'string'
3329 root 1.7 }
3330     ],
3331     [
3332 root 1.14 'move_block',
3333 root 1.7 {
3334 root 1.14 desc => 'Objects using these movement types cannot move over this space.',
3335     name => 'blocked movement',
3336 elmex 1.26 type => 'movement_type'
3337 root 1.14 }
3338     ],
3339     [
3340     'move_allow',
3341     {
3342     desc => 'Objects using these movement types are allowed to move over this space. Takes precedence over \'blocked movements\'.',
3343     name => 'allowed movement',
3344 elmex 1.26 type => 'movement_type'
3345 root 1.14 }
3346     ],
3347     [
3348     'move_slow',
3349     {
3350     desc => 'The types of movement that should by slowed down by the \'slow movement penalty\'.',
3351     name => 'slowed movement',
3352 elmex 1.26 type => 'movement_type'
3353 root 1.14 }
3354     ],
3355     [
3356     'move_slow_penalty',
3357     {
3358     desc => 'If <slow movement> is set to a value greater zero, all creatures matching \'slow move\' will be slower than normal on this spot. <slow movement> 1 - rough terrain <slow movement> 2 - very rough terrain ... <slow movement> 5 - default for deep swamp ... <slow movement> 7 - spider web (sticky as hell)',
3359     name => 'slow movement penalty',
3360     type => 'int'
3361 root 1.7 }
3362     ],
3363     [
3364     'last_heal',
3365     {
3366     desc => '<remove match> means remove object if found. Setting this is usually not recommended because inv. checkers are in general invisible. So, unlike for altars/ locked doors, the player won\'t expect to lose an object when walking over that square. And he doesn\'t even get a message either. So, *if* you enable <remove match>, make sure to inform the player what\'s going on!',
3367     name => 'remove match',
3368     type => 'bool'
3369     }
3370     ]
3371     ],
3372 root 1.14 desc => 'Inventory checkers passively check the players inventory for a specific object. You can set a connected value that is triggered either if that object is present or missing (-&gt; "last_sp") when a player walks over the inv. checker. A valid option is to remove the matching object (usually not recommended, see "last_heal"). <br><br> Alternatively, you can set your inv. checker to block all players that do/don\'t carry the matching object. <br><br> As you can see, inv. checkers are quite powerful, holding a great variety of possibilities.',
3373 root 1.3 ignore => [
3374     $IGNORE_LIST{system_object}
3375     ],
3376 root 1.5 name => 'Inventory Checker',
3377 root 1.3 use => 'Putting a check_inventory space in front of a gate (one below) and one on the opposite side works reasonably well as a control mechanism. Unlike the key/door-combo, this one works infinite since it is independant from map reset. Use it to put a "structure" into your maps: Player must solve area A to gain access to area B. This concept can be found in nearly every RPG - simple but effective.'
3378     },
3379 root 1.57 'Item Match' => {
3380     attr => [
3381     [
3382     'no_pick',
3383     {
3384     type => 'fixed',
3385     value => 1
3386     }
3387     ],
3388     [
3389     'slaying',
3390     {
3391     desc => 'If the string starts with \'match \', then it is interpreted as a match expression (e.g. \'match type=POTION\', or \'match type=SPELL in applied type=CONTAINER in inv in originator\'). For details, see http://pod.tst.eu/http://cvs.schmorp.de/deliantra/server/lib/cf/match.pm Optionally you can leave out the "match " prefix.',
3392     name => 'match expression',
3393     type => 'string'
3394     }
3395     ],
3396     [
3397     'connected',
3398     {
3399     desc => 'When the match is triggered, all objects with the same connection value get activated.',
3400     name => 'connection',
3401     type => 'string'
3402     }
3403     ],
3404     [
3405     'move_on',
3406     {
3407     desc => 'Which movement types automatically (as opposed to manually) activate this object.',
3408 root 1.58 name => 'movement on',
3409 root 1.57 type => 'movement_type'
3410     }
3411     ],
3412     [
3413     'move_off',
3414     {
3415     desc => 'Which movement types deactivate this object (e.g. button).',
3416 root 1.58 name => 'movement off',
3417 root 1.57 type => 'movement_type'
3418     }
3419     ],
3420     [
3421     'move_block',
3422     {
3423     desc => 'Objects using these movement types cannot move over this space.',
3424     name => 'blocked movement',
3425     type => 'movement_type'
3426     }
3427     ]
3428     ],
3429     desc => 'Match objects use the deliantra matching language (http://pod.tst.eu/http://cvs.schmorp.de/deliantra/server/lib/cf/match.pm) to match items on the same mapspace (if move_on/off are unset) or items trying to enter (if move_blocked is set). If a connected value is given, then it is triggered if the first object matching the expression is put on it, and the last is removed.',
3430     ignore => [
3431     $IGNORE_LIST{non_pickable}
3432     ],
3433     name => 'Item Match',
3434     use => 'If you want to trigger something else (e.g. a gate) when an item is above this object, use the move_on/move_off settings. If you want to keep something from entering if it has (or lacks) a specific item, use the move_blocked setting.'
3435     },
3436 root 1.8 'Item Transformer' => {
3437     attr => [
3438     [
3439     'food',
3440     {
3441     desc => '<number of uses> controls how many times the item transformer can be used. The value 0 means "unlimited"',
3442     name => 'number of uses',
3443     type => 'int'
3444     }
3445     ],
3446     [
3447     'slaying',
3448     {
3449     desc => 'Contains the verb that is used to construct a message to the player applying the item transformer.',
3450     name => 'verb',
3451     type => 'string'
3452     }
3453     ],
3454     [
3455     'startequip',
3456     {
3457     desc => 'A godgiven item vanishes as soon as the player drops it to the ground.',
3458     name => 'godgiven item',
3459     type => 'bool'
3460     }
3461     ],
3462     [
3463     'msg',
3464     {
3465     desc => 'This text may contain a description of the item transformer.',
3466     end => 'endmsg',
3467     name => 'description',
3468     type => 'text'
3469     }
3470     ]
3471     ],
3472     desc => 'An item transformer is simply applied, after having marked a \'victim\' item. If the victim is suitable, it will be transformed into something else.',
3473     name => 'Item Transformer',
3474     use => 'To make an item transformable, you just have to fill the \'slaying\' field. The syntax is: <br> <pre>slaying slayer:[yield ]new_item[;slayer:[yield ]new_item]*</pre> <br> with [] denoting optional part, and * any number of preceding []. \'new_item\' must be the name of an existing archetype. <br><br> Example, for object apple: slaying knife:2 half_apple <br><br> This means that, when applying a knife (should be an Item Transformer), one \'apple\' will be transformed into 2 \'half_apple\'.'
3475     },
3476 root 1.3 Jewel => {
3477 root 1.7 attr => [
3478     [
3479     'race',
3480     {
3481     type => 'fixed',
3482     value => 'gold and jewels'
3483     }
3484     ],
3485     [
3486     'msg',
3487     {
3488     desc => 'This text may describe the object.',
3489     end => 'endmsg',
3490     name => 'description',
3491     type => 'text'
3492     }
3493     ]
3494     ],
3495 root 1.5 desc => 'Items of the type Gold &amp; Jewels are handled like a currency. Unlike for any other type of item, in shops, the buy- and selling prices differ only marginally.',
3496     name => 'Jewel'
3497 root 1.1 },
3498 root 1.9 Key => {
3499     attr => [
3500     [
3501     'startequip',
3502     {
3503     desc => 'A godgiven item vanishes as soon as the player drops it to the ground.',
3504     name => 'godgiven item',
3505     type => 'bool'
3506     }
3507     ]
3508     ],
3509     desc => 'When carrying a key, a normal door can be opened. The key will disappear.',
3510     name => 'Key'
3511     },
3512 elmex 1.51 Lamp => {
3513     attr => [
3514     [
3515     'speed',
3516     {
3517     desc => 'This field is the speed of the lamp. (If the value 0.00208 is given here the fuel field will specify the burning duration in minutes.)',
3518     name => 'burn speed',
3519     type => 'float'
3520     }
3521     ],
3522     [
3523     'food',
3524     {
3525     desc => 'This field sets the burning duration of the lamp, which depends on the speed field of this object.',
3526     name => 'fuel',
3527     type => 'int'
3528     }
3529     ],
3530     [
3531     'range',
3532     {
3533     desc => 'This field sets the glow radius of the lamp if it is enabled. If you want to make a lamp that is already burning set the "glow radius" field.',
3534     name => 'enabled glow radius',
3535     type => 'int'
3536     }
3537 elmex 1.52 ],
3538     [
3539     'level',
3540     {
3541     desc => 'If this field specyfies the cursed effect\'s level. If it is 0 no cursed effect will be generate. See also the "cursed" flag.',
3542     name => 'level',
3543     type => 'int'
3544     }
3545     ],
3546     [
3547     'cursed',
3548     {
3549     desc => 'Cursed lamps, which have a level above 0, explode if the player applies them.',
3550     name => 'cursed',
3551     type => 'bool'
3552     }
3553 elmex 1.51 ]
3554     ],
3555     desc => 'Lamps are carryable light sources for players with a fuel tank.',
3556     name => 'Lamp'
3557     },
3558 root 1.3 'Locked Door' => {
3559 root 1.7 attr => [
3560     [
3561 root 1.14 'move_type',
3562 root 1.7 {
3563     type => 'fixed',
3564 root 1.14 value => 0
3565 root 1.7 }
3566     ],
3567     [
3568     'no_pick',
3569     {
3570     type => 'fixed',
3571     value => 1
3572     }
3573     ],
3574     [
3575     'slaying',
3576     {
3577 root 1.64 desc => 'The <key string> in the door must be identical with the <key string> in the special key, then the door is unlocked. It is VERY important to set the <key string> to something that is unique among the Deliantra mapset. DONT EVER USE the default string "set_individual_value". When the key string starts with "match ", then it is expected to be a match expression, which will be applied to the player, so you can use e.g. (match type=POTION in inv). Note that the matched object will be removed.',
3578 root 1.7 name => 'key string',
3579     type => 'string'
3580     }
3581     ],
3582     [
3583     'no_magic',
3584     {
3585     desc => 'Restricting the use of spells to pass this door. This should be set in most cases. (Don\'t forget that the spell "dimension door" is easily available at about wisdom level 10).',
3586     name => 'restrict spells',
3587     type => 'bool'
3588     }
3589     ],
3590     [
3591     'damned',
3592     {
3593     desc => 'Restricting the use of prayers to pass this door. This should be set in most cases.',
3594     name => 'restrict prayers',
3595     type => 'bool'
3596     }
3597     ],
3598     [
3599     'msg',
3600     {
3601     desc => 'When a player is trying to open the door without carrying the appropriate key, this text is displayed to the player. This is a good opportunity to place hints about the special key needed to unlock the door.',
3602     end => 'endmsg',
3603     name => 'lock message',
3604     type => 'text'
3605     }
3606     ]
3607     ],
3608     desc => 'A locked door can be opened only when carrying the appropriate special key.',
3609     ignore => [
3610     $IGNORE_LIST{non_pickable}
3611     ],
3612     name => 'Locked Door',
3613     use => 'If you want to create a locked door that cannot be opened (no key), set a &lt;key string&gt; like "no_key_available". This will clearify things and only a fool would create a key matching that string. Door-objects can not only be used for "doors". In many maps these are used with all kinds of faces/names, especially often as "magic force". A good example is the map "Lake_Country/ebony/masterlev". There you have magic forces (door objects) put under certain artifact items. To get your hands on the artifacts, you need to bring up the appropriate quest items (key objects).'
3614     },
3615     'Magic Ear' => {
3616     attr => [
3617     [
3618     'no_pick',
3619     {
3620     type => 'fixed',
3621     value => 1
3622     }
3623     ],
3624     [
3625     'connected',
3626     {
3627     desc => 'The Magic_ear will trigger all objects with the same connection value, every time it is activated.',
3628     name => 'connection',
3629 root 1.50 type => 'string'
3630 root 1.7 }
3631     ],
3632     [
3633     'msg',
3634     {
3635     desc => 'This textfield contains the keyword-matching-syntax. The text should have the following format: "@match <keyword1>|<keyword2>|... ". Any number of keywords from one to infinite is allowed. Make sure they are seperated by a \'|\'. Examples: "@match yes", "@match gold|treasure". The connected value will be triggerd when the player speaks any of the given keywords within a two-square radius. IMPORTANT: Upper/lower case does not make a difference!',
3636     end => 'endmsg',
3637     name => 'keyword-matching',
3638     type => 'text'
3639     }
3640     ]
3641     ],
3642     desc => 'Magic_ears trigger a connected value when the player speaks a specific keyword.',
3643     ignore => [
3644     $IGNORE_LIST{system_object}
3645     ],
3646     name => 'Magic Ear',
3647     use => 'Whenever you put magic_ears on your maps, make sure there are CLEAR and RELYABLE hints about the keywords somewhere. Don\'t make something like a gate that is opened by speaking "open" or "sesame", expecting the player to figure this out all by himself. <br><br> Magic_ears are typically used for interaction with NPCs. You can create the impression that the NPC actually *does* something according to his conversation with a player. Mostly this means opening a gate or handing out some item, but you could be quite creative here.'
3648     },
3649     'Magic Wall' => {
3650     attr => [
3651     [
3652     'dam',
3653     {
3654     desc => 'The magic wall will cast this <spell>.',
3655     name => 'spell',
3656     type => 'spell'
3657     }
3658     ],
3659     [
3660     'level',
3661     {
3662     desc => 'The wall will cast it\'s spells at level <spell level>. "level 1" walls cast spells at minimal strength. "level 100" walls cast deadly spells. Arch default is level 1 - you should always set this value to meet the overall difficulty of your map.',
3663     name => 'spell level',
3664     type => 'int'
3665     }
3666     ],
3667     [
3668     'connected',
3669     {
3670     desc => 'Every time the <connection> value is triggered, the wall will cast it\'s spell. You should set <casting speed> to zero, or this won\'t have much visible effect.',
3671     name => 'connection',
3672 root 1.50 type => 'string'
3673 root 1.7 }
3674     ],
3675     [
3676 elmex 1.21 'activate_on_push',
3677     {
3678     desc => 'Whether the teleporter should only be activated on push.',
3679 root 1.42 name => 'activate on push',
3680 elmex 1.21 type => 'bool'
3681     }
3682     ],
3683     [
3684     'activate_on_release',
3685     {
3686     desc => 'Whether the teleporter should only be activated on release.',
3687 root 1.42 name => 'activate on release',
3688 elmex 1.21 type => 'bool'
3689     }
3690     ],
3691     [
3692 root 1.7 'speed',
3693     {
3694     desc => 'The <casting speed> defines the spellcasting speed of the wall. You can fine-tune how long the duration between two casts shall be. If you want to create a wall that can be activated (cast per trigger) via connected lever/button/etc, you must set "speed 0".',
3695     name => 'casting speed',
3696     type => 'float'
3697     }
3698     ],
3699     [
3700 root 1.17 'speed_left',
3701     {
3702     desc => 'The speed left to the object. On every tick, if this value is higher than 0, the object acts/triggers/moves etc. and the value gets decremented by 1. Otherwise, it is incremented by <speed> on every tick.',
3703     name => 'speed left',
3704     type => 'float'
3705     }
3706     ],
3707     [
3708 root 1.7 'sp',
3709     {
3710     desc => 'The magic wall will cast it\'s spells always in the specified <direction>. A magic wall with direction set to <none> will always fire in a random direction.',
3711     name => 'direction',
3712     type => 'list',
3713     value => $LIST{direction}
3714     }
3715     ],
3716     [
3717 root 1.14 'move_block',
3718     {
3719     desc => 'Objects using these movement types cannot move over this space.',
3720     name => 'blocked movement',
3721 elmex 1.26 type => 'movement_type'
3722 root 1.14 }
3723     ],
3724     [
3725     'move_allow',
3726     {
3727     desc => 'Objects using these movement types are allowed to move over this space. Takes precedence over \'blocked movements\'.',
3728     name => 'allowed movement',
3729 elmex 1.26 type => 'movement_type'
3730 root 1.14 }
3731     ],
3732     [
3733     'move_slow',
3734 root 1.7 {
3735 root 1.14 desc => 'The types of movement that should by slowed down by the \'slow movement penalty\'.',
3736     name => 'slowed movement',
3737 elmex 1.26 type => 'movement_type'
3738 root 1.14 }
3739     ],
3740     [
3741     'move_slow_penalty',
3742     {
3743     desc => 'If <slow movement> is set to a value greater zero, all creatures matching \'slow move\' will be slower than normal on this spot. <slow movement> 1 - rough terrain <slow movement> 2 - very rough terrain ... <slow movement> 5 - default for deep swamp ... <slow movement> 7 - spider web (sticky as hell)',
3744     name => 'slow movement penalty',
3745     type => 'int'
3746 root 1.7 }
3747     ]
3748 root 1.3 ],
3749     desc => 'Magic walls fire spells in a given direction, in regular intervals. Magic walls can contain any spell. However, some spells do not operate very successfully in them. The only way to know is to test the spell you want to use with a wall. <br><br> Several types of magical walls are predefined for you in the archetypes, and can be found on the "connected" Pickmap.',
3750     ignore => [
3751     $IGNORE_LIST{non_pickable}
3752     ],
3753 root 1.5 name => 'Magic Wall',
3754 root 1.4 section => [
3755     [
3756     'destroyable',
3757 root 1.7 [
3758     [
3759     'alive',
3760     {
3761     desc => 'Walls with <is destroyable> enabled can be attacked and (eventually) destroyed by the player. If disabled, all other attributes on this tab, as well as resistances, are meaningless.',
3762     name => 'is destroyable',
3763     type => 'bool'
3764     }
3765     ],
3766     [
3767     'hp',
3768     {
3769     desc => 'The more <hitpoints> the wall has, the longer it takes to be destroyed.',
3770     name => 'hitpoints',
3771     type => 'int'
3772     }
3773     ],
3774     [
3775     'maxhp',
3776     {
3777     desc => '<max hitpoints> are the maximum amount of hitpoints the wall can have. This only makes sense if the wall can regain health.',
3778     name => 'max hitpoints',
3779     type => 'int'
3780     }
3781     ],
3782     [
3783     'ac',
3784     {
3785     desc => 'A magic wall of high <armour class> is less likely to get hit from an opponent. <armour class> can be considered the "counterpiece" to <weapon class>.',
3786     name => 'armour class',
3787     type => 'int'
3788     }
3789     ]
3790     ]
3791     ],
3792     [
3793     'resistance',
3794     [
3795     [
3796     'resist_physical',
3797     {
3798     name => 'resist physical %',
3799     type => 'int'
3800     }
3801     ],
3802     [
3803     'resist_magic',
3804     {
3805     name => 'resist magic %',
3806     type => 'int'
3807     }
3808     ],
3809     [
3810     'resist_fire',
3811     {
3812     name => 'resist fire %',
3813     type => 'int'
3814     }
3815     ],
3816     [
3817     'resist_electricity',
3818     {
3819     name => 'resist electricity %',
3820     type => 'int'
3821     }
3822     ],
3823     [
3824     'resist_cold',
3825     {
3826     name => 'resist cold %',
3827     type => 'int'
3828     }
3829     ],
3830     [
3831     'resist_confusion',
3832     {
3833     name => 'resist confusion %',
3834     type => 'int'
3835     }
3836     ],
3837     [
3838     'resist_acid',
3839     {
3840     name => 'resist acid %',
3841     type => 'int'
3842     }
3843     ],
3844     [
3845     'resist_drain',
3846     {
3847     name => 'resist draining %',
3848     type => 'int'
3849     }
3850     ],
3851     [
3852     'resist_weaponmagic',
3853     {
3854     name => 'resist weaponmagic %',
3855     type => 'int'
3856     }
3857     ],
3858     [
3859     'resist_ghosthit',
3860     {
3861     name => 'resist ghosthit %',
3862     type => 'int'
3863     }
3864     ],
3865     [
3866     'resist_poison',
3867     {
3868     name => 'resist poison %',
3869     type => 'int'
3870     }
3871     ],
3872     [
3873     'resist_slow',
3874     {
3875     name => 'resist slow %',
3876     type => 'int'
3877     }
3878     ],
3879     [
3880     'resist_paralyze',
3881     {
3882     name => 'resist paralyze %',
3883     type => 'int'
3884     }
3885     ],
3886     [
3887     'resist_fear',
3888     {
3889     name => 'resist fear %',
3890     type => 'int'
3891     }
3892     ],
3893     [
3894     'resist_deplete',
3895     {
3896     name => 'resist depletion %',
3897     type => 'int'
3898     }
3899     ],
3900     [
3901     'resist_death',
3902     {
3903     name => 'resist death-attack %',
3904     type => 'int'
3905     }
3906     ],
3907     [
3908     'resist_chaos',
3909     {
3910     name => 'resist chaos %',
3911     type => 'int'
3912     }
3913     ],
3914     [
3915     'resist_blind',
3916     {
3917     name => 'resist blinding %',
3918     type => 'int'
3919     }
3920     ],
3921     [
3922     'resist_holyword',
3923     {
3924     name => 'resist holy power %',
3925     type => 'int'
3926     }
3927     ],
3928     [
3929     'resist_godpower',
3930     {
3931     name => 'resist godpower %',
3932     type => 'int'
3933     }
3934     ]
3935     ]
3936     ]
3937     ],
3938     use => 'Spellcasting walls pose an interesting alternative to monsters. Usually they are set to be undestroyable. Thus, while monsters in a map can be cleared out, the magic walls remain. Low level characters for example will not be able to pass through their spell-area, hence they cannot loot a map that a high level character might have cleared out. <br><br> Another point of magic walls is that if the player dies, he has to face them all again. Magic walls can add a kind of "permanent thrill" to your maps. <br><br> Be careful that your magic walls don\'t kill the monsters on a map. If placing monsters, eventually take ones that are immune to the walls\' spell(s). <br><br> It is possible to make walls rotate when triggered. But that is so confusing (and useless IMHO) that I did not mention it above. You can find a working example on the map "/pup_land/castle_eureca/castle_eureca8".'
3939     },
3940 root 1.49 'Map Script' => {
3941     attr => [
3942     [
3943     'connected',
3944     {
3945     desc => 'When the map script object is triggered, it will execute the perl script with the triggering object as $activator.',
3946     name => 'connection',
3947 root 1.50 type => 'string'
3948 root 1.49 }
3949     ],
3950     [
3951     'activate_on_push',
3952     {
3953     desc => 'Whether the teleporter should only be activated on push.',
3954     name => 'activate on push',
3955     type => 'bool'
3956     }
3957     ],
3958     [
3959     'activate_on_release',
3960     {
3961     desc => 'Whether the teleporter should only be activated on release.',
3962     name => 'activate on release',
3963     type => 'bool'
3964     }
3965     ],
3966     [
3967     'msg',
3968     {
3969     desc => 'This perl script will be executed each time the objetc is triggered.',
3970     end => 'endmsg',
3971     name => 'script',
3972     type => 'text'
3973     }
3974     ]
3975     ],
3976 root 1.57 desc => 'The map script object is a very special object that can react to connected events and executes a perl script in the msg slot.',
3977 root 1.49 ignore => [
3978     $IGNORE_LIST{system_object}
3979     ],
3980     name => 'Map Script',
3981 root 1.57 use => 'The perl script gets passed a $state value and $activator, $self, $originator objects and can use the set/get/find/timer functions to react to/trigger other objects. See http://pod.tst.eu/http://cvs.schmorp.de/deliantra/server/lib/cf/mapscript.pm for details.'
3982 root 1.49 },
3983 root 1.7 Marker => {
3984     attr => [
3985     [
3986     'no_pick',
3987     {
3988     type => 'fixed',
3989     value => 1
3990     }
3991     ],
3992     [
3993     'slaying',
3994     {
3995     desc => 'The <key string> can be detected by inv. checkers/detectors. If the player already has a force with that <key string>, there won\'t be inserted a second one.',
3996     name => 'key string',
3997     type => 'string'
3998     }
3999     ],
4000     [
4001     'connected',
4002     {
4003     desc => 'When the detector is triggered, all objects with the same connection value get activated.',
4004     name => 'connection',
4005 root 1.50 type => 'string'
4006 root 1.7 }
4007     ],
4008     [
4009     'speed',
4010 root 1.4 {
4011 root 1.7 desc => 'The <marking speed> defines how quickly it will mark something standing on the marker. Set this value rather high to make sure the player really gets his mark. I think <marking speed> 1.0 should do fine.',
4012     name => 'marking speed',
4013     type => 'float'
4014 root 1.4 }
4015     ],
4016     [
4017 root 1.17 'speed_left',
4018     {
4019     desc => 'The speed left to the object. On every tick, if this value is higher than 0, the object acts/triggers/moves etc. and the value gets decremented by 1. Otherwise, it is incremented by <speed> on every tick.',
4020     name => 'speed left',
4021     type => 'float'
4022     }
4023     ],
4024     [
4025 root 1.7 'food',
4026     {
4027     desc => 'This value defines the duration of the force it inserts. If nonzero, the duration of the player\'s mark is finite: about 1 food per 10 seconds. <mark duration> zero/unset means the mark will stay on the player forever.',
4028     name => 'mark duration',
4029     type => 'int'
4030     }
4031     ],
4032     [
4033     'name',
4034     {
4035     desc => 'When the player steps onto the marker, all existing forces in the players inventory with a <key string> matching <delete mark> will be removed. If you don\'t want to remove any marks, leave this textfield empty. Note that the string <delete mark> is set as the name of this marker. So don\'t be confused, and remember changing the name will take effect on the marker\'s functionality.',
4036     name => 'delete mark',
4037     type => 'string'
4038     }
4039     ],
4040     [
4041     'msg',
4042 root 1.4 {
4043 root 1.7 desc => 'In the moment when the player gets marked, this text is displayed to him. You should really set a message in any marker you create, because it\'s the only way for the player to notice what\'s going on.',
4044     end => 'endmsg',
4045     name => 'marking message',
4046     type => 'text'
4047 root 1.4 }
4048     ]
4049     ],
4050 root 1.62 desc => 'A marker is an object that inserts an invisible force (a mark) into a player stepping on it. This force does nothing except containing a &lt;key string&gt; which can be discovered by detectors or inventory checkers. It is also possible to use markers for removing marks again (by setting the "name" slot to the name of the marker to be removed). <br><br> Note that the player has no possibility to "see" his own marks, except by the effect that they cause on the maps.',
4051 root 1.3 ignore => [
4052     $IGNORE_LIST{system_object}
4053     ],
4054 root 1.5 name => 'Marker',
4055 root 1.3 use => 'Markers hold real cool possibilities for map-making. I encourage you to use them frequently. However there is one negative point about markers: Players don\'t "see" what\'s going on with them. It is your task, as map-creator, to make sure the player is always well informed and never confused. <br><br> Please avoid infinite markers when they aren\'t needed. They\'re using a little space in the player file after all, so if there is no real purpose, set an expire time.'
4056     },
4057     Misc => {
4058 root 1.7 attr => [
4059     [
4060 root 1.14 'move_block',
4061     {
4062     desc => 'Objects using these movement types cannot move over this space.',
4063     name => 'blocked movement',
4064 elmex 1.26 type => 'movement_type'
4065 root 1.14 }
4066     ],
4067     [
4068     'move_allow',
4069     {
4070     desc => 'Objects using these movement types are allowed to move over this space. Takes precedence over \'blocked movements\'.',
4071     name => 'allowed movement',
4072 elmex 1.26 type => 'movement_type'
4073 root 1.14 }
4074     ],
4075     [
4076     'move_slow',
4077 root 1.7 {
4078 root 1.14 desc => 'The types of movement that should by slowed down by the \'slow movement penalty\'.',
4079     name => 'slowed movement',
4080 elmex 1.26 type => 'movement_type'
4081 root 1.14 }
4082     ],
4083     [
4084     'move_slow_penalty',
4085     {
4086     desc => 'If <slow movement> is set to a value greater zero, all creatures matching \'slow move\' will be slower than normal on this spot. <slow movement> 1 - rough terrain <slow movement> 2 - very rough terrain ... <slow movement> 5 - default for deep swamp ... <slow movement> 7 - spider web (sticky as hell)',
4087     name => 'slow movement penalty',
4088     type => 'int'
4089 root 1.7 }
4090     ],
4091     [
4092     'cursed',
4093     {
4094     desc => 'Curses can have various effects: On equipment and food, they generally harm the player in some way.',
4095     name => 'cursed',
4096     type => 'bool'
4097     }
4098     ],
4099     [
4100     'damned',
4101     {
4102     desc => 'A damned item/floor on the ground makes it impossible for players to use prayers on that spot. It also prevents players from saving. Damnation on equipment works similar to a curse.',
4103     name => 'damned',
4104     type => 'bool'
4105     }
4106     ],
4107     [
4108     'unique',
4109     {
4110     desc => 'Unique items exist only one time on a server. If the item is taken, lost or destroyed - it\'s gone for good.',
4111     name => 'unique item',
4112     type => 'bool'
4113     }
4114     ],
4115     [
4116     'startequip',
4117     {
4118     desc => 'A godgiven item vanishes as soon as the player drops it to the ground.',
4119     name => 'godgiven item',
4120     type => 'bool'
4121     }
4122     ],
4123     [
4124     'msg',
4125     {
4126     desc => 'This text may describe the object.',
4127     end => 'endmsg',
4128     name => 'description',
4129     type => 'text'
4130     }
4131     ]
4132     ],
4133 root 1.5 name => 'Misc'
4134 root 1.1 },
4135 root 1.3 Money => {
4136 root 1.7 attr => [
4137     [
4138     'race',
4139     {
4140     type => 'fixed',
4141     value => 'gold and jewels'
4142     }
4143     ]
4144     ],
4145 root 1.3 desc => 'Items of the type Money are handled as currency. Money cannot be sold/bought in shops. When money is dropped in a shop, it stays the same.<br> When a player picks an item from a shop and attempts to walk over the shop mat, the item\'s selling-price is automatically subtracted from the player\'s money. <br><br> For money, always use the default arches. Don\'t modify them.',
4146     ignore => [
4147     'unpaid'
4148 root 1.5 ],
4149     name => 'Money'
4150 root 1.3 },
4151     'Monster & NPC' => {
4152 root 1.7 attr => [
4153     [
4154     'alive',
4155     {
4156     type => 'fixed',
4157     value => 1
4158     }
4159     ],
4160     [
4161     'randomitems',
4162     {
4163     desc => 'When the monster is killed, items from the treasurelist will drop to the ground. This is a common way to reward players for killing (masses of) monsters. Note that you can always put items into the monster\'s inventory. Those will drop-at-kill just like the stuff from the <treasurelist>.',
4164     name => 'treasurelist',
4165     type => 'treasurelist'
4166     }
4167     ],
4168     [
4169 root 1.28 'treasure_env',
4170     {
4171     desc => 'Set this flag to move treasure items created into the environment (map) instead of putting them into the object.',
4172     name => 'treasure in env',
4173     type => 'bool'
4174     }
4175     ],
4176     [
4177 root 1.7 'level',
4178     {
4179     desc => 'A monster\'s <level> is the most important attribute. <level> affects the power of a monster in various ways.',
4180     name => 'level',
4181     type => 'int'
4182     }
4183     ],
4184     [
4185     'race',
4186     {
4187 root 1.17 desc => 'Every monster should have a race set to categorize it. The monster\'s <race> can have different effects: Slaying weapons inflict tripple damage against enemy races and holy word kills only enemy races of the god.',
4188 root 1.7 name => 'race',
4189     type => 'string'
4190     }
4191     ],
4192     [
4193     'exp',
4194     {
4195 root 1.17 desc => 'When a player kills this monster, he will get exactly this amount of <experience>. The experience will flow into the skill-category the player used for the kill. If you create special monsters of tweaked strenght/abilities, always make sure that the <experience> is set to a reasonable value. Compare with existing arches to get a feeling what reasonable means. Keep in mind that spellcasting monsters are a lot harder to kill than non-spellcasters!',
4196 root 1.7 name => 'experience',
4197     type => 'int'
4198     }
4199     ],
4200     [
4201     'speed',
4202     {
4203     desc => 'The <speed> determines how fast a monster will both move and fight. High <speed> makes a monster considerably stronger.',
4204     name => 'speed',
4205     type => 'float'
4206     }
4207     ],
4208     [
4209 root 1.17 'speed_left',
4210     {
4211     desc => 'The speed left to the object. On every tick, if this value is higher than 0, the object acts/triggers/moves etc. and the value gets decremented by 1. Otherwise, it is incremented by <speed> on every tick.',
4212     name => 'speed left',
4213     type => 'float'
4214     }
4215     ],
4216     [
4217 root 1.7 'other_arch',
4218     {
4219     desc => 'This only takes effect if <multiply> is enabled. The monster will create a <breed monster> every once in a while. <breed monster> can be set to any valid arch-name of a monster. Multipart monster should not be used.',
4220     name => 'breed monster',
4221     type => 'string'
4222     }
4223     ],
4224     [
4225     'generator',
4226     {
4227     desc => 'Monsters with <generator> enabled will create a <breed monster> every once in a while. Mice are a good example for this effect. If enabled, you must also set <breed monster> or check <template generation> and put other monsters in the inventory.',
4228     name => 'multiply',
4229     type => 'bool'
4230     }
4231     ],
4232     [
4233     'use_content_on_gen',
4234     {
4235     desc => 'This only takes effect if <multiply> is enabled. The monster will create a new monster every once in a while by duplicating it\'s inventory. In this case, the <breed monster> value is never used and can be forgotten. Each time the monster need to generate an object, it will be a randomly chosen item from the inventory. When generator is destroyed, inventory is destroyed.',
4236     name => 'template generation',
4237     type => 'bool'
4238     }
4239     ],
4240     [
4241 root 1.14 'move_type',
4242 root 1.7 {
4243 root 1.14 desc => 'Determines which kinds of movement this object can use (e.g. for monsters) or grants (e.g. for amulets).',
4244     name => 'movement type',
4245 elmex 1.26 type => 'movement_type'
4246 root 1.7 }
4247     ],
4248     [
4249     'undead',
4250     {
4251     desc => 'Several spells only affect undead monsters: turn undead, banish undead, holy word, etc.',
4252     name => 'undead',
4253     type => 'bool'
4254     }
4255     ],
4256     [
4257     'carrying',
4258     {
4259     desc => 'If a monster has something in the inventory, this value can be set to reflect the slowdown due to the carried weight.',
4260     name => 'carries weight',
4261     type => 'int'
4262     }
4263     ],
4264     [
4265 root 1.28 'precious',
4266     {
4267 elmex 1.32 desc => 'Set this flag to indicate that this monster is precious, i.e. it should not be lightly destroyed. This is most useful on pets and keeps the server from destroying them on destroy_pets/monster floors and will try to save them when the player logs out.',
4268 root 1.28 name => 'precious',
4269     type => 'bool'
4270     }
4271     ],
4272     [
4273 root 1.7 'msg',
4274     {
4275     end => 'endmsg',
4276     name => 'npc message',
4277     type => 'text'
4278     }
4279     ]
4280     ],
4281 root 1.3 desc => 'Monsters can behave in various kinds of ways. They can be aggressive, attacking the player. Or peaceful, helping the player - maybe joining him as pet. The unagressive creatures who communicate with players are usually called "NPCs" (Non Player Character), a well-known term in role-play environments.',
4282     ignore => [
4283     'material',
4284     'name_pl',
4285     'nrof',
4286     'value',
4287     'unpaid'
4288     ],
4289 root 1.5 name => 'Monster & NPC',
4290 root 1.4 section => [
4291     [
4292     'melee',
4293 root 1.7 [
4294     [
4295     'attacktype',
4296     {
4297     desc => 'This number is a bitmask, specifying the monster\'s attacktypes for melee damage. Attacktypes are: physical, magical, fire, cold.. etc. Strong monsters often have more than just physical attacktype. When a monster with multiple attacktypes hits aan oponent, it will do as much damage as the "best" of it\'s attacktypes does. So, the more attacktypes, the more dangerous. Attacktypes "magic" and "chaos" are somehow exceptions.',
4298     name => 'attacktype',
4299     type => 'bitmask',
4300     value => $BITMASK{attacktype}
4301     }
4302     ],
4303     [
4304     'dam',
4305     {
4306     desc => 'Among other parameters, <damage> affects how much melee damage a monster inflicts. <damage> is used as base value for damage per hit. <level>, <speed>, <weapon class> and resistances also take effect on the melee damage of a monster.',
4307     name => 'damage',
4308     type => 'int'
4309     }
4310     ],
4311     [
4312     'wc',
4313     {
4314     desc => 'Monsters of high <weapon class> are more likely to really hit their opponent. <weapon class> can be considered the "counterpiece" to <armour class>.',
4315     name => 'weapon class',
4316     type => 'int'
4317     }
4318     ],
4319     [
4320     'hp',
4321     {
4322     desc => 'The <health points> of a monster define how long it takes to kill it. With every successful hit from an opponent, <health points> get drained - The monster dies by zero <health points>.',
4323     name => 'health points',
4324     type => 'int'
4325     }
4326     ],
4327     [
4328     'maxhp',
4329     {
4330     desc => '<max health> is the maximum amount of <health points> this monster can have.',
4331     name => 'max health',
4332     type => 'int'
4333     }
4334     ],
4335     [
4336     'ac',
4337     {
4338     desc => 'Monsters of low <armour class> are less likely to get hit from their opponent. <armour class> can be considered the "counterpiece" to <weapon class>. Values typically range between +20 (very bad) to -20 (quite good).',
4339     name => 'armour class',
4340     type => 'int'
4341     }
4342     ],
4343     [
4344     'Con',
4345     {
4346 root 1.8 desc => 'Monsters regenerate this many health points each 4 ticks. Hence, the healing rate is independent of <speed>.',
4347 root 1.7 name => 'healing rate',
4348     type => 'int'
4349     }
4350     ],
4351     [
4352     'reflect_missile',
4353     {
4354     desc => 'A monster with this flag has the ability to <reflect missiles>, all kinds of projectiles (e.g. arrows, bolts, boulders) will bounce off.',
4355     name => 'reflect missiles',
4356     type => 'bool'
4357     }
4358     ],
4359     [
4360     'hitback',
4361     {
4362     desc => 'Monsters with <hitback> enabled hurt the attacker in proportion to the amount of damage the *attacker* inflicted. This damage is additional to the regular melee damage of the monster. As far as I know, hitback uses acid attacktype, and it only takes effect if the monster actually has acid attacktype at it\'s disposal. Acid spheres for example use this feature.',
4363     name => 'hitback',
4364     type => 'bool'
4365     }
4366     ],
4367     [
4368     'one_hit',
4369     {
4370     desc => 'Monsters with <one hit only> dissapear after one successful hit to a player.',
4371     name => 'one hit only',
4372     type => 'bool'
4373     }
4374     ]
4375     ]
4376     ],
4377     [
4378     'spellcraft',
4379     [
4380     [
4381     'can_cast_spell',
4382     {
4383     desc => 'If <can cast spell> is disabled, the monster cannot cast any spell. Only wands/rods/etc can be used, given the appropriate abilities.',
4384     name => 'can cast spell',
4385     type => 'bool'
4386     }
4387     ],
4388     [
4389     'reflect_spell',
4390     {
4391     desc => 'A monster with this flag has the ability to <reflect spells>, all kinds of spell-bullets and -beams will bounce off. Generally this flag should not be set because it puts wizard-type players at an unfair disadvantage.',
4392     name => 'reflect spells',
4393     type => 'bool'
4394     }
4395     ],
4396     [
4397     'sp',
4398     {
4399     desc => 'Like players, monsters need <spellpoints> to do magic. Monsters use them for both wizard- and prayer-spells. However, this value defines only the amount of *initial* spellpoints the monster starts with. When creating a spellcasting monster, remember that <max spellpoints> and <spellpoint regen.> are more important than just initial <spellpoints>.',
4400     name => 'spellpoints',
4401     type => 'int'
4402     }
4403     ],
4404     [
4405     'maxsp',
4406     {
4407     desc => '<max spellpoints> is the maximum number of spellpoints a monster can hold. Setting this to high values has little effect unless the monster has a decent <spellpoint regen.>, or the spell "regenerate mana" at it\'s disposal.',
4408     name => 'max spellpoints',
4409     type => 'int'
4410     }
4411     ],
4412     [
4413     'Pow',
4414     {
4415 root 1.8 desc => 'Monsters regenerate this many spellpoints each 16 ticks. Hence, the spellpoint regeneration rate is independent of <speed>. To make a real tough spellcasting monster, the rate of spellpoint regeneration is most important. If your monster is still not casting fast enough, give it the spell-ability of "regenerate mana". That, paired with high <max spellpoints>, is the ultimate thing.',
4416 root 1.7 name => 'spellpoint regen.',
4417     type => 'int'
4418     }
4419     ],
4420     [
4421     'path_attuned',
4422     {
4423     desc => 'Click on the <attuned paths> button to select spellpaths. The creature will get attuned to the specified spellpaths.',
4424     name => 'attuned paths',
4425     type => 'bitmask',
4426     value => $BITMASK{spellpath}
4427     }
4428     ],
4429     [
4430     'path_repelled',
4431     {
4432     desc => 'Click on the <repelled paths> button to select spellpaths. The creature will get repelled to the specified spellpaths.',
4433     name => 'repelled paths',
4434     type => 'bitmask',
4435     value => $BITMASK{spellpath}
4436     }
4437     ],
4438     [
4439     'path_denied',
4440     {
4441     desc => 'Click on the <denied paths> button to select spellpaths. The creature won\'t be able to cast spells of the specified paths.',
4442     name => 'denied paths',
4443     type => 'bitmask',
4444     value => $BITMASK{spellpath}
4445     }
4446     ]
4447     ]
4448     ],
4449     [
4450     'ability',
4451     [
4452     [
4453     'Int',
4454     {
4455     desc => 'The <detect hidden> value gives monsters the ablitity to find hidden/invisible creatures. Higher values make for better detection-skills. Enabling <see invisible> makes this value obsolete.',
4456     name => 'detect hidden',
4457     type => 'int'
4458     }
4459     ],
4460     [
4461     'see_invisible',
4462     {
4463     desc => 'A monster with the ability to <see invisible> cannot be fooled with by invisible or hiding players. This flag is a must-have for high-level monsters. When a monster is unable to detect invisible players, it can be killed without fighting back.',
4464     name => 'see invisible',
4465     type => 'bool'
4466     }
4467     ],
4468     [
4469     'can_see_in_dark',
4470     {
4471     desc => 'A monster with the ability to <see in darkness> cannot be fooled by spells of darkness or dark maps. This flag is a "should-have" for high-level monsters. When a monster is unable to see in darkness, players can cast darkness and sneak around it safely.',
4472     name => 'see in darkness',
4473     type => 'bool'
4474     }
4475     ],
4476     [
4477     'can_use_weapon',
4478     {
4479     desc => 'Monster is able to wield weapon type objects.',
4480     name => 'can use weapons',
4481     type => 'bool'
4482     }
4483     ],
4484     [
4485     'can_use_bow',
4486     {
4487     desc => 'Monster is able to use missile-weapon type objects.',
4488     name => 'can use bows',
4489     type => 'bool'
4490     }
4491     ],
4492     [
4493     'can_use_armour',
4494     {
4495     desc => 'Monster is able to wear protective equipment like brestplate armour, shields, helmets etc.',
4496     name => 'can use armour',
4497     type => 'bool'
4498     }
4499     ],
4500     [
4501     'can_use_ring',
4502     {
4503     desc => 'Monster is able to wear rings.',
4504     name => 'can use rings',
4505     type => 'bool'
4506     }
4507     ],
4508     [
4509     'can_use_wand',
4510     {
4511     desc => 'Monster is able to use wands and staves.',
4512     name => 'can use wands',
4513     type => 'bool'
4514     }
4515     ],
4516     [
4517     'can_use_rod',
4518     {
4519     desc => 'Monster is able to use rods.',
4520     name => 'can use rods',
4521     type => 'bool'
4522     }
4523     ],
4524     [
4525     'can_use_scroll',
4526     {
4527     desc => 'Monster is able to read scrolls.',
4528     name => 'can use scrolls',
4529     type => 'bool'
4530     }
4531     ],
4532     [
4533     'can_use_skill',
4534     {
4535     desc => 'Monster is able to use skills from it\'s inventory. For example, you can put a throwing skill object and some boulders into the monster\'s object and set <can use skills>.',
4536     name => 'can use skills',
4537     type => 'bool'
4538     }
4539     ]
4540     ]
4541     ],
4542     [
4543     'behave',
4544     [
4545     [
4546     'monster',
4547     {
4548     desc => 'When <monster behaviour> is enabled, this object will behave like a monster: It can move and attack enemies (which are typically players). This flag should be set for all monsters as-such. Monsters which don\'t move, like guards, should also have <monster behaviour>, but in combination with <stand still>. It should *not* be set for things like immobile generators.',
4549     name => 'monster behaviour',
4550     type => 'bool'
4551     }
4552     ],
4553     [
4554     'unaggressive',
4555     {
4556     desc => '<unaggressive> monsters do not attack players unless attacked first.',
4557     name => 'unaggressive',
4558     type => 'bool'
4559     }
4560     ],
4561     [
4562     'friendly',
4563     {
4564     desc => '<friendly> monsters help the player, attacking any non-friendly monsters in range.',
4565     name => 'friendly',
4566     type => 'bool'
4567     }
4568     ],
4569     [
4570     'stand_still',
4571     {
4572 root 1.36 desc => 'Monsters which <stand still> won\'t move to leave their position. When agressive, they will attack all enemies who get close to them. This behaviour is commonly known from castle guards. In older versions of Deliantra it was possible to eventually push a <stand still>-monster out of position by force. I believe this is no longer possible. Neverthless, you should still be cautious when lining up <stand still>-monster in order to "defend" something: Such monsters are rather easy to kill. It\'s good for low level maps, but not much more.',
4573 root 1.7 name => 'stand still',
4574     type => 'bool'
4575     }
4576     ],
4577     [
4578     'sleep',
4579     {
4580     desc => 'Being <asleep>, a monster won\'t move unless a player enters the <sensing range> of the monster. Usually the sensing range is larger than the players line of sight. Due to that, in most cases the player won\'t ever notice weither a monster was asleep or not.',
4581     name => 'asleep',
4582     type => 'bool'
4583     }
4584     ],
4585     [
4586     'will_apply',
4587     {
4588     desc => 'This entry defines which kinds of environment actions the creature is able to perform.',
4589     name => 'misc. actions',
4590     type => 'bitmask',
4591     value => $BITMASK{will_apply}
4592     }
4593     ],
4594     [
4595     'pick_up',
4596     {
4597     desc => 'Click on the <pick up> button and select which types of objects the creature should try to pick up. Note also that if <can use armor>, <can use weapon>, <can use ring>... etc are set, then the creature will pick up the matching items even if this is not set here.',
4598     name => 'pick up',
4599     type => 'bitmask',
4600     value => $BITMASK{pick_up}
4601     }
4602     ],
4603     [
4604     'Wis',
4605     {
4606     desc => '<sensing range> determines how close a player needs to be before the creature wakes up. This is done as a square, for reasons of speed. Thus, if the <sensing range> is 11, any player that moves within the 11x11 square of the monster will wake the monster up. If the player has stealth, the size of this square is reduced in half plus 1.',
4607     name => 'sensing range',
4608     type => 'int'
4609     }
4610     ],
4611     [
4612 root 1.15 'attack_movement_bits_0_3',
4613 root 1.7 {
4614 root 1.15 desc => 'If this is set to default, the standard mode of movement will be used.',
4615 root 1.7 name => 'attack movement',
4616 root 1.15 type => 'list',
4617     value => $LIST{attack_movement_bits_0_3}
4618     }
4619     ],
4620     [
4621     'attack_movement_bits_4_7',
4622     {
4623     desc => 'This movement is not in effect when the monster has an enemy and should only be used for non agressive monsters.',
4624     name => 'normal movement',
4625     type => 'list',
4626     value => $LIST{attack_movement_bits_4_7}
4627 root 1.7 }
4628     ],
4629     [
4630     'run_away',
4631     {
4632     desc => 'This is a percentage value in the range 0-100. When the monster\'s health points drop below this percentage (relative to max health), it attempts to run away from the attacker.',
4633     name => 'run at % health',
4634     type => 'int'
4635     }
4636     ]
4637     ]
4638     ],
4639     [
4640     'resistance',
4641     [
4642     [
4643     'resist_physical',
4644     {
4645     name => 'resist physical %',
4646     type => 'int'
4647     }
4648     ],
4649     [
4650     'resist_magic',
4651     {
4652     name => 'resist magic %',
4653     type => 'int'
4654     }
4655     ],
4656     [
4657     'resist_fire',
4658     {
4659     name => 'resist fire %',
4660     type => 'int'
4661     }
4662     ],
4663     [
4664     'resist_electricity',
4665     {
4666     name => 'resist electricity %',
4667     type => 'int'
4668     }
4669     ],
4670     [
4671     'resist_cold',
4672     {
4673     name => 'resist cold %',
4674     type => 'int'
4675     }
4676     ],
4677     [
4678     'resist_confusion',
4679     {
4680     name => 'resist confusion %',
4681     type => 'int'
4682     }
4683     ],
4684     [
4685     'resist_acid',
4686     {
4687     name => 'resist acid %',
4688     type => 'int'
4689     }
4690     ],
4691     [
4692     'resist_drain',
4693     {
4694     name => 'resist draining %',
4695     type => 'int'
4696     }
4697     ],
4698     [
4699     'resist_weaponmagic',
4700     {
4701     name => 'resist weaponmagic %',
4702     type => 'int'
4703     }
4704     ],
4705     [
4706     'resist_ghosthit',
4707     {
4708     name => 'resist ghosthit %',
4709     type => 'int'
4710     }
4711     ],
4712     [
4713     'resist_poison',
4714     {
4715     name => 'resist poison %',
4716     type => 'int'
4717     }
4718     ],
4719     [
4720     'resist_slow',
4721     {
4722     name => 'resist slow %',
4723     type => 'int'
4724     }
4725     ],
4726     [
4727     'resist_paralyze',
4728     {
4729     name => 'resist paralyze %',
4730     type => 'int'
4731     }
4732     ],
4733     [
4734     'resist_fear',
4735     {
4736     name => 'resist fear %',
4737     type => 'int'
4738     }
4739     ],
4740     [
4741     'resist_deplete',
4742     {
4743     name => 'resist depletion %',
4744     type => 'int'
4745     }
4746     ],
4747     [
4748     'resist_death',
4749     {
4750     name => 'resist death-attack %',
4751     type => 'int'
4752     }
4753     ],
4754     [
4755     'resist_chaos',
4756     {
4757     name => 'resist chaos %',
4758     type => 'int'
4759     }
4760     ],
4761     [
4762     'resist_blind',
4763     {
4764     name => 'resist blinding %',
4765     type => 'int'
4766     }
4767     ],
4768     [
4769     'resist_holyword',
4770     {
4771     name => 'resist holy power %',
4772     type => 'int'
4773     }
4774     ],
4775     [
4776     'resist_godpower',
4777     {
4778     name => 'resist godpower %',
4779     type => 'int'
4780     }
4781     ]
4782     ]
4783     ]
4784     ],
4785     use => 'Monsters play a central role in most maps. Choosing the right combination of monsters for your map is vital: <UL> <LI> Place only monsters of slightly varying (increasing) strength. It\'s no fun to play for two hours just to find out the last monster is unbeatable. Similar, it\'s not exciting to fight orcs after passing a room of dragons.<br> This rule applies only for linear maps (one room after the other), with treasure at the end. You can sprinkle the treasure around, or make non-linear maps - That is often more entertaining. <LI> Places with high level monsters must not be easy to reach. Balrogs, Dragonmen and the likes should be at the end of a quest, not at the beginning. <LI> Don\'t stick monsters together that tend to kill each other. Fire- and cold dragons in one room for example is a bad idea. By weakening and killing each other they are easy prey for players, not worth the experience they hold. <LI> Create your own monsters, especially for "boss"-type monsters. Having stage-bosses guarding treasure is a lot of fun when done right. Avoid to create monsters with completely non-intuitive abilities: Don\'t give ice-spells to firedragons or vice versa. Don\'t add draining attack to trolls, etc. Additionally, you should inform the player before he bumps right into some very special/unusual monster. <LI> Last but not least: Always keep an eye on the experience your monsters hold. Design your maps in a way that high experience is always well-defended. Don\'t make large rooms full with only one kind of monster. Keep in mind the different abilities/techniques players can use. </UL> I know it\'s impossible to make the perfectly balanced map. There\'s always some part which is found too easy or too hard for a certain kind of player. Just give it your best shot. And listen to feedback from players if you receive some. :-)'
4786     },
4787 root 1.9 'Monster (Grimreaper)' => {
4788     desc => 'A grimreaper is a monster that vanishes after it did some number of draining attacks.',
4789     ignore => [
4790     'material',
4791     'name_pl',
4792     'nrof',
4793     'value',
4794     'unpaid'
4795     ],
4796     import => [
4797 root 1.29 'Monster & NPC'
4798 root 1.9 ],
4799     name => 'Monster (Grimreaper)',
4800     section => [
4801     [
4802     'grimreaper',
4803     [
4804     [
4805     'value',
4806     {
4807     desc => 'The object vanishes after this number of draining attacks.',
4808     name => 'attacks',
4809     type => 'int'
4810     }
4811     ]
4812     ]
4813     ]
4814     ]
4815     },
4816 root 1.7 'Mood Floor' => {
4817     attr => [
4818     [
4819     'no_pick',
4820 root 1.4 {
4821 root 1.7 type => 'fixed',
4822     value => 1
4823 root 1.4 }
4824     ],
4825     [
4826 root 1.7 'last_sp',
4827     {
4828     desc => '<mood> is used to determine what will happen to the monster when affected by the mood floor: <mood> \'furious\': Makes all monsters aggressive <mood> \'angry\': As above but pets are unaffected <mood> \'calm\': Makes all monsters unaggressive <mood> \'sleep\': Puts all monsters to sleep <mood> \'charm\': Turns monster into a pet of person who triggers the square. This setting is not enabled for continous operation, you need to insert a <connection> value!',
4829     name => 'mood',
4830     type => 'list',
4831     value => $LIST{mood}
4832     }
4833     ],
4834     [
4835     'connected',
4836     {
4837     desc => 'This should only be set in combination with <mood number> 4. Normally, monsters are affected by the mood floor as soon as they step on it. But charming (monster -> pet) is too powerful, so it needs to be activated. Typically it is connected to an altar, for buying a "hireling". But a powerful pet could as well be the reward for solving a quest. Or even better: It could be *part* of a quest!',
4838     name => 'connection',
4839 root 1.50 type => 'string'
4840 root 1.7 }
4841     ],
4842     [
4843     'no_magic',
4844     {
4845     desc => 'If enabled, it is impossible for players to use (wizard-) spells on that spot.',
4846     name => 'no spells',
4847     type => 'bool'
4848     }
4849     ],
4850     [
4851     'damned',
4852     {
4853     desc => 'If enabled, it is impossible for players to use prayers on that spot. It also prevents players from saving.',
4854     name => 'no prayers',
4855     type => 'bool'
4856     }
4857     ]
4858     ],
4859     desc => 'As the name implies, mood floors can change the "mood" of a monsters/NPC. For example, an unagressive monster could be turned mad to start attacking. Similar, an agressive monster could be calmed.',
4860     ignore => [
4861     $IGNORE_LIST{system_object}
4862     ],
4863     name => 'Mood Floor',
4864     use => 'Mood floors are absolutely cool for NPC interaction. To make an unaggressive monster/NPC attack, put a creator with "other_arch furious_floor" under it. Connect the creator to a magic_ear, so the player speaks a keyword like "stupid sucker" - and the monster attacks. <br><br> To turn an NPC into a pet, put a charm_floor under it and connect it directly to a magic_ear. Then the player speaks a keyword like "help me" - and the NPC joins him as pet. <br><br> (Of course you must always give clear hints about keywords! And there is no reason why you couldn\'t use a button/lever/pedestal etc. instead of a magic_ear.)'
4865     },
4866     Mover => {
4867     attr => [
4868     [
4869     'attacktype',
4870     {
4871     desc => 'If forced movement is enabled, the mover "freezes" anyone it moves (so they are forced to move along a chain). For players there is no way to escape this forced movement, except being pushed by a second player.',
4872     name => 'forced movement',
4873     type => 'bool'
4874     }
4875     ],
4876     [
4877     'maxsp',
4878     {
4879     desc => 'The player will be "frozen" for that many moves. If <freeze duration> is zero, with <forced movement> enabled, then <freeze duration> gets assigned the "default value" 2 automatically.',
4880     name => 'freeze duration',
4881     type => 'int'
4882     }
4883     ],
4884     [
4885     'speed',
4886     {
4887     desc => 'The movement speed value determines how fast a chain of these movers will push a player along (default is -0.2).',
4888     name => 'movement speed',
4889     type => 'float'
4890     }
4891     ],
4892     [
4893 root 1.17 'speed_left',
4894     {
4895     desc => 'The speed left to the object. On every tick, if this value is higher than 0, the object acts/triggers/moves etc. and the value gets decremented by 1. Otherwise, it is incremented by <speed> on every tick.',
4896     name => 'speed left',
4897     type => 'float'
4898     }
4899     ],
4900     [
4901 root 1.7 'sp',
4902     {
4903     desc => 'The mover will push creatures in the specified <direction>. A mover with direction set to <none> will spin clockwise, thus pushing creatures in unpredictable directions.',
4904     name => 'direction',
4905     type => 'list',
4906     value => $LIST{direction}
4907     }
4908     ],
4909     [
4910     'lifesave',
4911     {
4912 root 1.9 desc => 'If enabled, the mover gets "used up" after a certain number of moves (specified by <number of uses>). If disabled, the mover works infinitely.',
4913 root 1.7 name => 'gets used up',
4914     type => 'bool'
4915     }
4916     ],
4917     [
4918     'hp',
4919     {
4920     desc => 'This value has only a meaning if <gets used up> is set: <number of uses> is the number of times minus one, that it will move a creature before disappearing. (It will move someone <number of uses>+1 times, then vanish).',
4921     name => 'number of uses',
4922     type => 'int'
4923     }
4924     ]
4925     ],
4926     desc => 'Movers move the objects above them. However, only living objects are affected (monsters/NPCs always, players optional). Movers have a direction, so players can be made to move in a pattern, and so can monsters. Motion is involuntary. Additionally, players or monsters can be "frozen" while ontop of movers so that they MUST move along a chain of them. <br><br> Multisquare monsters can be moved as well, given enough space. Movers are usually invisible.',
4927     ignore => [
4928     $IGNORE_LIST{non_pickable}
4929     ],
4930     name => 'Mover',
4931     section => [
4932     [
4933     'targets',
4934     [
4935     [
4936     'level',
4937     {
4938     desc => 'If <move players> is enabled, both players and monsters will be moved. In the arches\' default it is disabled - thus ONLY monsters get moved. Remember that "monsters" includes NPCs! This feature provides you with the possibility to make NPCs literally "come to life". Example: The player is talking with an NPC, speaking a certain keyword. This triggers a magic_ear and activates creators, creating (per default: monster-only) movers under the NPC\'s feet. The NPC starts "walking" on a predefined route! Note that it\'s useful to set this NPC immune to everything, preventing the player to push the NPC off his trace.',
4939     name => 'move players',
4940     type => 'bool'
4941     }
4942     ],
4943     [
4944 root 1.14 'move_on',
4945 root 1.7 {
4946 root 1.14 desc => 'Which movement types activate the mover.',
4947     name => 'movement type',
4948     type => 'movement_type'
4949 root 1.7 }
4950     ]
4951     ]
4952     ]
4953     ],
4954     use => 'NEVER EVER consider a mover being unpassable in the backwards direction. Setting "forced movement" makes it seemingly impossible but there is still a trick: One player can push a second player past the mover, in opposite to the mover\'s direction! The more movers, the more players needed. Hence, don\'t make a treasure room that is surrounded by movers instead of solid walls/gates. <br><br> Btw, it does not make a difference putting movers above or below the floor. Moreover, movers that are set to be invisible cannot be discovered with the show_invisible spell. <br><br> Note that Movers and Directors are seperate objects, even though they look and act similar. Directors only do spells/missiles, while movers only do living creatures (depending on how it is set: monsters and players).'
4955     },
4956     Pedestal => {
4957     attr => [
4958     [
4959     'no_pick',
4960 root 1.4 {
4961 root 1.7 type => 'fixed',
4962     value => 1
4963 root 1.4 }
4964     ],
4965     [
4966 root 1.7 'slaying',
4967 root 1.4 {
4968 root 1.56 desc => 'the <match race> defines the object we\'re looking for. If <match race> matches the monster\'s or the player\'s race, we have a match. Yes, pedestals can detect a player\'s race! E.g. you could create a place where only fireborns can enter, by setting "slaying unnatural". If it is set to "player", any player stepping on the pedestal is a match. Very useful if you want to open a gate for players but not for monsters. If the string starts with \'match \', then it is interpreted as a match expression (e.g. \'match type=POTION\', or \'match type=SPELL in applied type=CONTAINER in inv in originator\'). For details, see http://pod.tst.eu/http://cvs.schmorp.de/deliantra/server/lib/cf/match.pm',
4969 root 1.7 name => 'match race',
4970     type => 'string'
4971 root 1.4 }
4972     ],
4973     [
4974 root 1.7 'connected',
4975 root 1.4 {
4976 root 1.7 desc => 'When the pedestal is triggered, all objects with the same connection value get activated.',
4977     name => 'connection',
4978 root 1.50 type => 'string'
4979 root 1.4 }
4980     ],
4981     [
4982 root 1.14 'move_on',
4983 root 1.4 {
4984 root 1.14 desc => 'Which movement types automatically (as opposed to manually) activate this object.',
4985 root 1.58 name => 'movement on',
4986 elmex 1.26 type => 'movement_type'
4987 root 1.4 }
4988     ]
4989     ],
4990 root 1.3 desc => 'Pedestals are designed to detect certain types of living objects. When a predefined type of living creature steps on the pedestal, the connected value is triggered.',
4991     ignore => [
4992     $IGNORE_LIST{non_pickable}
4993     ],
4994 root 1.5 name => 'Pedestal',
4995 root 1.3 use => 'If you want to create a place where only players of a certain race can enter, put a teleporter over your pedestal. So the teleporter is only activated for players of the matching race. Do not use gates, because many other players could sneak in. If you put powerful artifacts into such places, generally set "startequip 1", so that they are preserved for that one race and can\'t be traded to others.'
4996     },
4997 root 1.60 'Pedestal Trigger' => {
4998     desc => 'Pedestal triggers are pedestals which reset after a short period of time. Every time it is either applied or reset, the &lt;connection&gt; value is triggered.',
4999     ignore => [
5000     $IGNORE_LIST{non_pickable}
5001     ],
5002     import => [
5003     'Pedestal'
5004     ],
5005     name => 'Pedestal Trigger'
5006     },
5007 root 1.3 Pit => {
5008 root 1.7 attr => [
5009     [
5010     'no_pick',
5011     {
5012     type => 'fixed',
5013     value => 1
5014     }
5015     ],
5016     [
5017 root 1.42 'range',
5018     {
5019 root 1.44 desc => 'The radius of the square area that the pit will randomly put the player into (0 to 3, default 1).',
5020 root 1.43 name => 'spread radius',
5021 root 1.42 type => 'int'
5022     }
5023     ],
5024     [
5025 root 1.7 'connected',
5026     {
5027     desc => 'When a <connection> value is set, the pit can be opened/closed by activating the connection.',
5028     name => 'connection',
5029 root 1.50 type => 'string'
5030 root 1.7 }
5031     ],
5032     [
5033 elmex 1.21 'activate_on_push',
5034     {
5035     desc => 'Whether the teleporter should only be activated on push.',
5036 root 1.42 name => 'activate on push',
5037 elmex 1.21 type => 'bool'
5038     }
5039     ],
5040     [
5041     'activate_on_release',
5042     {
5043     desc => 'Whether the teleporter should only be activated on release.',
5044 root 1.42 name => 'activate on release',
5045 elmex 1.21 type => 'bool'
5046     }
5047     ],
5048     [
5049 root 1.7 'hp',
5050     {
5051     desc => 'The pit will transport creatures (and items) randomly into a two-square radius of the destination coordinates. If the destination square becomes blocked, the pit will act like being filled up and not work anymore!',
5052     name => 'destination X',
5053     type => 'int'
5054     }
5055     ],
5056     [
5057     'sp',
5058     {
5059     desc => 'The pit will transport creatures (and items) randomly into a two-square radius of the destination coordinates. If the destination square becomes blocked, the pit will act like being filled up and not work anymore!',
5060     name => 'destination Y',
5061     type => 'int'
5062     }
5063     ],
5064     [
5065     'wc',
5066     {
5067     desc => 'The <position state> defines the position of the gate: Zero means completely open/down, the "number of animation-steps" (usually about 6 or 7) means completely closed/up state. I suggest you don\'t mess with this value - Leave the default in place.',
5068     name => 'position state',
5069     type => 'int'
5070     }
5071     ],
5072     [
5073 root 1.14 'move_on',
5074 root 1.7 {
5075 root 1.14 desc => 'Which movement types automatically (as opposed to manually) activate this object.',
5076 root 1.58 name => 'movement on',
5077 elmex 1.26 type => 'movement_type'
5078 root 1.7 }
5079     ]
5080     ],
5081 root 1.42 desc => 'Pits are holes, transporting the player when he walks (and falls) into them. A speciality about pits is that they don\'t transport the player to the exact destination, but within a configurable radius of the destination (never on blocked squares).<br> Optionally, pits can get closed and opened, similar to gates.<br><br> Monsters and items are affected by pits just as well as players. Even multipart monsters can fall through them, given enough space.',
5082 root 1.3 ignore => [
5083     $IGNORE_LIST{non_pickable}
5084     ],
5085 root 1.5 name => 'Pit',
5086 root 1.3 use => 'Pits can add interesting effects to your map. When using them, make sure to use them in a "logical way": Pits should always drop the player to some kind of lower level. They should not be used to randomly interconnect maps like teleporters do.'
5087     },
5088     'Poison Food' => {
5089 root 1.5 desc => 'When eating, the player\'s stomache is drained by 1/4 of food. If his food drops to zero, the player might even die.',
5090     name => 'Poison Food'
5091 root 1.3 },
5092     Potion => {
5093 root 1.7 attr => [
5094     [
5095     'level',
5096     {
5097     desc => 'If the potion contains a spell, the spell is cast at this level. For other potions it should be set at least to 1.',
5098     name => 'potion level',
5099     type => 'int'
5100     }
5101     ],
5102     [
5103     'sp',
5104     {
5105     desc => 'When a player drinks this potion, the selected spell will be casted (once). This should work for any given spell. E.g. heal is "sp 35", magic power is "sp 67".',
5106     name => 'spell',
5107     type => 'spell'
5108     }
5109     ],
5110     [
5111     'attacktype',
5112     {
5113     desc => 'There are two types of special effects for potions: \'life restoration\' - restore the player\'s stats lost by death or draining (this has nothing in common with the restoration spell!) \'improvement\' - increase the player\'s maximum health/mana/grace by a very small amount.',
5114     name => 'special effect',
5115     type => 'list',
5116     value => $LIST{potion_effect}
5117     }
5118     ],
5119     [
5120     'cursed',
5121     {
5122     desc => 'If a potion is cursed, benefits generally turn into penalties. Note that potions can be "uncursed" by praying over an altar, with relative ease. *But* the potion must be identified to notice that it is cursed >:)',
5123     name => 'cursed',
5124     type => 'bool'
5125     }
5126     ],
5127     [
5128     'startequip',
5129     {
5130     desc => 'A godgiven item vanishes as soon as the player drops it to the ground.',
5131     name => 'godgiven item',
5132     type => 'bool'
5133     }
5134     ]
5135     ],
5136 root 1.3 desc => 'The player can drink these and gain various kinds of benefits (/penalties) by doing so.',
5137 root 1.5 name => 'Potion',
5138 root 1.4 section => [
5139     [
5140     'stats',
5141 root 1.7 [
5142     [
5143     'Str',
5144     {
5145     desc => 'The player\'s strentgh will rise/fall by the given value for permanent (of course there is an upper limit). Generally there shouldn\'t be stat potions granting more than one stat. Cursed potions will subtract the stats if positive.',
5146     name => 'strength',
5147     type => 'int'
5148     }
5149     ],
5150     [
5151     'Dex',
5152     {
5153 elmex 1.33 desc => 'The player\'s strentgh will rise/fall by the given value for permanent (of course there is an upper limit). Generally there shouldn\'t be stat potions granting more than one stat. Cursed potions will subtract the stats if positive.',
5154 root 1.7 name => 'dexterity',
5155     type => 'int'
5156     }
5157     ],
5158     [
5159     'Con',
5160     {
5161 elmex 1.33 desc => 'The player\'s strentgh will rise/fall by the given value for permanent (of course there is an upper limit). Generally there shouldn\'t be stat potions granting more than one stat. Cursed potions will subtract the stats if positive.',
5162 root 1.7 name => 'constitution',
5163     type => 'int'
5164     }
5165     ],
5166     [
5167     'Int',
5168     {
5169 elmex 1.33 desc => 'The player\'s strentgh will rise/fall by the given value for permanent (of course there is an upper limit). Generally there shouldn\'t be stat potions granting more than one stat. Cursed potions will subtract the stats if positive.',
5170 root 1.7 name => 'intelligence',
5171     type => 'int'
5172     }
5173     ],
5174     [
5175     'Pow',
5176     {
5177 elmex 1.33 desc => 'The player\'s strentgh will rise/fall by the given value for permanent (of course there is an upper limit). Generally there shouldn\'t be stat potions granting more than one stat. Cursed potions will subtract the stats if positive.',
5178 root 1.7 name => 'power',
5179     type => 'int'
5180     }
5181     ],
5182     [
5183     'Wis',
5184     {
5185 elmex 1.33 desc => 'The player\'s strentgh will rise/fall by the given value for permanent (of course there is an upper limit). Generally there shouldn\'t be stat potions granting more than one stat. Cursed potions will subtract the stats if positive.',
5186 root 1.7 name => 'wisdom',
5187     type => 'int'
5188     }
5189     ],
5190     [
5191     'Cha',
5192     {
5193 elmex 1.33 desc => 'The player\'s strentgh will rise/fall by the given value for permanent (of course there is an upper limit). Generally there shouldn\'t be stat potions granting more than one stat. Cursed potions will subtract the stats if positive.',
5194 root 1.7 name => 'charisma',
5195     type => 'int'
5196     }
5197     ]
5198     ]
5199     ],
5200     [
5201     'resistance',
5202     [
5203     [
5204     'resist_physical',
5205     {
5206     desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
5207     name => 'resist physical %',
5208     type => 'int'
5209     }
5210     ],
5211     [
5212     'resist_magic',
5213     {
5214 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
5215 root 1.7 name => 'resist magic %',
5216     type => 'int'
5217     }
5218     ],
5219     [
5220     'resist_fire',
5221     {
5222 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
5223 root 1.7 name => 'resist fire %',
5224     type => 'int'
5225     }
5226     ],
5227     [
5228     'resist_electricity',
5229     {
5230 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
5231 root 1.7 name => 'resist electricity %',
5232     type => 'int'
5233     }
5234     ],
5235     [
5236     'resist_cold',
5237     {
5238 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
5239 root 1.7 name => 'resist cold %',
5240     type => 'int'
5241     }
5242     ],
5243     [
5244     'resist_acid',
5245     {
5246 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
5247 root 1.7 name => 'resist acid %',
5248     type => 'int'
5249     }
5250     ],
5251     [
5252     'resist_confusion',
5253     {
5254 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
5255 root 1.7 name => 'resist confusion %',
5256     type => 'int'
5257     }
5258     ],
5259     [
5260     'resist_weaponmagic',
5261     {
5262 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
5263 root 1.7 name => 'resist weaponmagic %',
5264     type => 'int'
5265     }
5266     ],
5267     [
5268 elmex 1.33 'resist_ghosthit',
5269 root 1.7 {
5270 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
5271     name => 'resist ghosthit %',
5272 root 1.7 type => 'int'
5273     }
5274     ],
5275     [
5276 elmex 1.33 'resist_slow',
5277 root 1.7 {
5278 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
5279     name => 'resist slow %',
5280 root 1.7 type => 'int'
5281     }
5282     ],
5283     [
5284 elmex 1.33 'resist_fear',
5285 root 1.7 {
5286 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
5287     name => 'resist fear %',
5288 root 1.7 type => 'int'
5289     }
5290     ],
5291     [
5292 elmex 1.33 'resist_death',
5293 root 1.7 {
5294 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
5295     name => 'resist death-attack %',
5296     type => 'int'
5297     }
5298     ],
5299     [
5300     'resist_chaos',
5301     {
5302     desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
5303     name => 'resist chaos %',
5304     type => 'int'
5305     }
5306     ],
5307     [
5308     'resist_blind',
5309     {
5310     desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
5311     name => 'resist blinding %',
5312     type => 'int'
5313     }
5314     ],
5315     [
5316     'resist_holyword',
5317     {
5318     desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
5319     name => 'resist holy power %',
5320     type => 'int'
5321     }
5322     ],
5323     [
5324     'resist_godpower',
5325     {
5326     desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
5327     name => 'resist godpower %',
5328     type => 'int'
5329     }
5330     ],
5331     [
5332     'resist_paralyze',
5333     {
5334     desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
5335     name => 'resist paralyze %',
5336     type => 'int'
5337     }
5338     ],
5339     [
5340     'resist_drain',
5341     {
5342     desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
5343     name => 'resist draining %',
5344     type => 'int'
5345     }
5346     ],
5347     [
5348     'resist_deplete',
5349     {
5350     desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
5351     name => 'resist depletion %',
5352     type => 'int'
5353     }
5354     ],
5355     [
5356     'resist_poison',
5357     {
5358     desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
5359     name => 'resist poison %',
5360 root 1.7 type => 'int'
5361     }
5362     ]
5363     ]
5364     ]
5365     ],
5366     use => 'One potion should never give multiple benefits at once.'
5367     },
5368     'Power Crystal' => {
5369     attr => [
5370     [
5371     'sp',
5372 root 1.4 {
5373 root 1.7 desc => '<initial mana> is the amount of spellpoints that the crystal holds when the map is loaded.',
5374     name => 'initial mana',
5375     type => 'int'
5376 root 1.4 }
5377     ],
5378     [
5379 root 1.7 'maxsp',
5380 root 1.4 {
5381 root 1.7 desc => 'The <mana capacity> defines how much mana can be stored in the crystal. This is what makes the crystal interesting. Wizard-players will always seek for crystals with large capacities.',
5382     name => 'mana capacity',
5383     type => 'int'
5384 root 1.4 }
5385     ]
5386     ],
5387 root 1.5 desc => 'Power crystals can store a player\'s mana: When the player applies the crystal with full mana, half of it flows into the crystal. When the player applies it with lacking mana, the crystal replenishes the player\'s mana.',
5388     name => 'Power Crystal'
5389 root 1.1 },
5390 root 1.3 Projectile => {
5391 root 1.7 attr => [
5392     [
5393     'attacktype',
5394     {
5395     desc => 'This number is a bitmask, specifying the projectile\'s attacktypes. Attacktypes are: physical, magical, fire, cold.. etc. This works identical to melee weapons. Note that shooting weapons cannot have attacktypes.',
5396     name => 'attacktype',
5397     type => 'bitmask',
5398     value => $BITMASK{attacktype}
5399     }
5400     ],
5401     [
5402     'race',
5403     {
5404     desc => 'Only shooting weapons with matching <ammunition class> can fire these projectiles. For arrows set "arrows", for crossbow bolts set "crossbow bolts" (big surprise). In certain cases, the ammunition class is displayed in the game. Hence, when you create a new ammunition class, choose an intuitive name like "missiles", "spirit bolts" - whatever. You can also make special containers holding these projectiles by setting the <container class> to match your <ammunition class>.',
5405     name => 'ammunition class',
5406     type => 'string'
5407     }
5408     ],
5409     [
5410     'slaying',
5411     {
5412     desc => 'Slaying means the weapon does tripple (3x) damage to monsters of the specified race. If <slaying race> matches an arch name, only monsters of that archtype receive tripple damage. Tripple damage is very effective.',
5413     name => 'slaying race',
5414     type => 'string'
5415     }
5416     ],
5417     [
5418     'dam',
5419     {
5420     desc => 'The projectile <damage> significantly affects the damage done. Damage can be further increased by the shooting weapon\'s attributes.',
5421     name => 'damage',
5422     type => 'int'
5423     }
5424     ],
5425     [
5426     'wc',
5427     {
5428     desc => 'This value is supposed to be the base <weaponclass>, but it seems to have rather little effect. High values are good here, low values bad.',
5429     name => 'weaponclass',
5430     type => 'int'
5431     }
5432     ],
5433     [
5434     'food',
5435     {
5436     desc => 'The <chance to break> defines the breaking probability when this projectile hits an obstacle, e.g. wall or monster. The value is the %-chance to break, ranging from 0 (never breaking) to 100 (breaking at first shot).',
5437     name => 'chance to break',
5438     type => 'int'
5439     }
5440     ],
5441     [
5442     'magic',
5443     {
5444     desc => 'Magic bonus increases chance to hit and damage a little bit.',
5445     name => 'magic bonus',
5446     type => 'int'
5447     }
5448     ],
5449     [
5450     'unique',
5451     {
5452     desc => 'Unique items exist only one time on a server. If the item is taken, lost or destroyed - it\'s gone for good.',
5453     name => 'unique item',
5454     type => 'bool'
5455     }
5456     ],
5457     [
5458     'startequip',
5459     {
5460     desc => 'A godgiven item vanishes as soon as the player drops it to the ground.',
5461     name => 'godgiven item',
5462     type => 'bool'
5463     }
5464     ],
5465     [
5466     'no_drop',
5467     {
5468     desc => 'When a monster carries a projectile with <don\'t drop>, this item will never drop to the ground but vanish instead. If this object is shot, it can still drop after hitting an obstacle. You can prevent this by setting <chance to break> 100.',
5469     name => 'don\'t drop',
5470     type => 'bool'
5471     }
5472     ],
5473     [
5474     'msg',
5475     {
5476     desc => 'This text may describe the projectile. This could be nice for very special ones.',
5477     end => 'endmsg',
5478     name => 'description',
5479     type => 'text'
5480     }
5481     ]
5482     ],
5483     desc => 'Projectiles like arrows/crossbow bolts are used as ammunition for shooting weapons. <br><br> It\'s very easy to add new pairs of weapons &amp; projectiles. Just set matching &lt;ammunition class&gt; both for shooting weapon and projectile.',
5484     name => 'Projectile',
5485     use => 'If you want to create new kinds of projectiles, you could add an alchemical receipe to create these. Don\'t create new pairs of weapons &amp; projectiles unless they really fullfill a useful purpose. In fact, even bows and crossbows are rarely ever used.'
5486     },
5487     Ring => {
5488     desc => 'Rings are worn on the hands - one ring each. Wearing rings, the object\'s stats will directly be inherited to the player. Usually enhancing his spellcasting potential.',
5489     import => [
5490 root 1.29 'Amulet'
5491 root 1.7 ],
5492     name => 'Ring',
5493     use => 'When you create an artifact ring, never forget that players can wear <B>two</B> rings! Due to that it is extremely important to keep rings in balance with the game. <br><br> Also keep in mind that rings are generally the wizard\'s tools. They should primarily grant bonuses to spellcasting abilities and non-physical resistances.'
5494     },
5495     Rod => {
5496     attr => [
5497     [
5498     'sp',
5499     {
5500     desc => 'Sets the <spell> of the rod. Consider twice before handing out special rods to players, since they can be used endlessly without any mana cost! Rods with heal/ restoration/ protection spells, IF available, MUST be very very VERY hard to get!',
5501     name => 'spell',
5502     type => 'spell'
5503     }
5504     ],
5505     [
5506     'level',
5507     {
5508     desc => 'The casting level of the <spell> determines it\'s power. For attack spells, level should be set to something reasonable.',
5509     name => 'casting level',
5510     type => 'int'
5511     }
5512     ],
5513     [
5514     'hp',
5515     {
5516     desc => 'This value represents the initial amount of spellpoints in the rod. Naturally, this is quite unimportant.',
5517     name => 'initial spellpoints',
5518     type => 'int'
5519     }
5520     ],
5521     [
5522     'maxhp',
5523     {
5524     desc => 'When the rod is fully charged up, it will hold this maximum amount of spellpoints. Make sure it is enough to cast the contained spell at least once. But don\'t set the value too high, as that might make the rod too effective.',
5525     name => 'max. spellpoints',
5526     type => 'int'
5527     }
5528     ],
5529     [
5530     'startequip',
5531     {
5532     desc => 'A godgiven item vanishes as soon as the player drops it to the ground.',
5533     name => 'godgiven item',
5534     type => 'bool'
5535     }
5536     ],
5537     [
5538     'msg',
5539     {
5540     desc => 'This text may contain a description of the rod.',
5541     end => 'endmsg',
5542     name => 'description',
5543     type => 'text'
5544     }
5545     ]
5546     ],
5547     desc => 'A rod contains a spell. The player can use this spell by applying and fireing the rod. Rods need time to regenerate their "internal" spellpoints, lowering the effectiveness in combat. But unlike wands/scrolls, rods can be used endlessly.',
5548     ignore => [
5549     'title'
5550     ],
5551     name => 'Rod',
5552     use => 'Rods with healing/curing spells are extremely powerful. Usually, potions have to be used for that purpose. Though, potions are expensive and only good for one-time-use.<br>'
5553     },
5554     Rune => {
5555     attr => [
5556     [
5557     'no_pick',
5558     {
5559     type => 'fixed',
5560     value => 1
5561     }
5562     ],
5563     [
5564 root 1.14 'move_on',
5565 root 1.7 {
5566 root 1.14 desc => 'Which movement types automatically (as opposed to manually) activate this object.',
5567 root 1.58 name => 'movement on',
5568 elmex 1.26 type => 'movement_type'
5569 root 1.7 }
5570     ],
5571     [
5572     'level',
5573     {
5574     desc => 'This value sets the level the rune will cast the spell it contains at, if applicable. A level 99 rune casts a very, very mean spell of whatever. (<rune level> 0 runes won\'t detonate at all!) Level Also effects how easily a rune may be found and disarmed, and how much experience the player gets for doing so. Beware: High level runes can be quite a cheap source of experience! So either make them tough, or keep the level low.',
5575     name => 'rune level',
5576     type => 'int'
5577     }
5578     ],
5579     [
5580     'Cha',
5581     {
5582     desc => 'This value determines what fraction of the time the rune is visible: It\'ll be randomly visible 1/<visibility> of the time. Also effects how easily the rune may be found.',
5583     name => 'visibility',
5584     type => 'int'
5585     }
5586     ],
5587     [
5588     'hp',
5589     {
5590     desc => 'The rune will detonate <number of charges> times before disappearing.',
5591     name => 'number of charges',
5592     type => 'int'
5593     }
5594     ],
5595     [
5596     'dam',
5597     {
5598     desc => '<direct damage> specifies how much damage is done by the rune, if it doesn\'t contain a spell. This should be set in reasonable relation to the rune\'s level.',
5599     name => 'direct damage',
5600     type => 'int'
5601     }
5602     ],
5603     [
5604     'attacktype',
5605     {
5606     desc => 'If there isn\'t any spell (and <summon monster> is unset), this attribute defines what attacktype to use for direct damage when the rune detonates.',
5607     name => 'attacktype',
5608     type => 'bitmask',
5609     value => $BITMASK{attacktype}
5610     }
5611     ],
5612     [
5613     'msg',
5614     {
5615     desc => 'When the rune detonates, this text is displayed to the victim. For especially powerful runes, create an appropriate thrilling description. ;)',
5616     end => 'endmsg',
5617     name => 'detonation text',
5618     type => 'text'
5619     }
5620     ]
5621 root 1.3 ],
5622     desc => 'A rune is a magical enscription on the dungeon floor. <br><br> Runes hit any monster or person who steps on them for \'dam\' damage in \'attacktype\' attacktype. Alternatively, the rune could contain any spell, and will cast this spell when it detonates. Yet another kind is the "summoning rune", summoning predefined monsters of any kind, at detonation. <br><br> Many runes are already defined in the archetypes.',
5623     ignore => [
5624     'no_pick',
5625     'title',
5626     'name_pl',
5627     'weight',
5628     'value',
5629     'material',
5630     'unpaid'
5631     ],
5632 root 1.5 name => 'Rune',
5633 root 1.4 section => [
5634     [
5635     'spellcraft',
5636 root 1.7 [
5637     [
5638     'sp',
5639     {
5640     desc => 'The selected <spell> defines the spell in the rune, if any. (Many runes do direct damage).',
5641     name => 'spell',
5642     type => 'spell'
5643     }
5644     ],
5645     [
5646     'slaying',
5647     {
5648     desc => 'Name of the spell in the rune, if any. <spell name> is optional, but if present, overrides the <spell> setting.',
5649     name => 'spell name',
5650     type => 'string'
5651     }
5652     ],
5653     [
5654     'other_arch',
5655     {
5656     desc => 'This string defines the spell in the rune, if any. <spell arch> is optional, but if present, overrides the <spell> setting. You can choose any of the existing arches.',
5657     name => 'spell arch',
5658     type => 'string'
5659     }
5660     ],
5661     [
5662     'maxsp',
5663     {
5664     desc => 'If set, the rune will cast it\'s containing spell (if any) in this <direction>.In most cases this appears useless because the spell directly hits the player.',
5665     name => 'direction',
5666     type => 'list',
5667     value => $LIST{direction}
5668     }
5669     ],
5670     [
5671     'race',
5672     {
5673     desc => 'If this is set to the arch name of any monster, together with <spell name> "summon evil monster", the rune will summon a bunch of those on detonation. (dam and attacktype will still be ignored in this case). Runes are even capable of summoning multi-square monsters, given enough space. You\'d better test it though.',
5674     name => 'summon monster',
5675     type => 'string'
5676     }
5677     ],
5678     [
5679     'maxhp',
5680     {
5681     desc => 'This should only be set to a summoning rune. It will then summon that many creatures of the kind <summon monster>.',
5682     name => 'summon amount',
5683     type => 'int'
5684     }
5685     ]
5686     ]
5687 root 1.4 ]
5688     ],
5689 root 1.3 use => 'Avoid monsters stepping on your runes. For example, summoning runes together with spellcasting- and attack-runes is usually a bad idea.'
5690     },
5691 root 1.37 'Safe ground' => {
5692 elmex 1.23 attr => [
5693     [
5694 root 1.35 'move_block',
5695     {
5696     desc => 'Objects using these movement types cannot move over this space.',
5697     name => 'blocked movement',
5698     type => 'movement_type'
5699     }
5700     ],
5701     [
5702     'move_allow',
5703     {
5704     desc => 'Objects using these movement types are allowed to move over this space. Takes precedence over \'blocked movements\'.',
5705     name => 'allowed movement',
5706     type => 'movement_type'
5707     }
5708     ],
5709     [
5710     'move_slow',
5711     {
5712     desc => 'The types of movement that should by slowed down by the \'slow movement penalty\'.',
5713     name => 'slowed movement',
5714     type => 'movement_type'
5715     }
5716     ],
5717     [
5718     'move_slow_penalty',
5719     {
5720     desc => 'If <slow movement> is set to a value greater zero, all creatures matching \'slow move\' will be slower than normal on this spot. <slow movement> 1 - rough terrain <slow movement> 2 - very rough terrain ... <slow movement> 5 - default for deep swamp ... <slow movement> 7 - spider web (sticky as hell)',
5721     name => 'slow movement penalty',
5722     type => 'int'
5723     }
5724     ],
5725     [
5726 elmex 1.23 'no_pick',
5727     {
5728     type => 'fixed',
5729     value => 1
5730     }
5731     ]
5732     ],
5733 root 1.37 desc => 'Safe ground is a special object that prevents any effects that might be harmful for the map, other players or items on the map. It blocks all magic and prayers, usage of alchemy, prevents potions from being used and blocks bombs from exploding. Note that altars that do cast spells still work.',
5734 elmex 1.23 ignore => [
5735     $IGNORE_LIST{non_pickable}
5736     ],
5737 root 1.37 name => 'Safe ground',
5738 elmex 1.24 use => 'Safe ground can be used to prevents any means of burning or destroying the items in a shop. Put this object below all floor tiles in your map and your shop will be safe. It\'s generally useful for making areas where really no kind of spell should be invoked by a player.'
5739 elmex 1.23 },
5740 root 1.3 Savebed => {
5741 root 1.7 attr => [
5742     [
5743     'no_pick',
5744     {
5745     type => 'fixed',
5746     value => 1
5747     }
5748     ],
5749     [
5750     'no_magic',
5751     {
5752     type => 'fixed',
5753     value => 1
5754     }
5755     ],
5756     [
5757     'damned',
5758     {
5759     type => 'fixed',
5760     value => 1
5761     }
5762     ]
5763     ],
5764 root 1.3 desc => 'When the player applies a savebed, he is not only saved. Both his respawn-after-death and his word-of-recall positions are pointing to the last-applied savebed.',
5765     ignore => [
5766     $IGNORE_LIST{non_pickable}
5767     ],
5768 root 1.5 name => 'Savebed',
5769 root 1.35 use => 'Put savebed locations in towns, do not put them into dungeons. It is absolutely neccessary that a place with savebeds is 100% secure. That means: <UL> <LI> Monsters must not be able to reach the savebeds under any circumstances! <LI> If there are NPCs around, make sure they have the friendly-flag set. <LI> Insert a reliable exit! Make sure there is no possibility that players get trapped in a savebed location. <LI> If possible, mark the whole site as no-spell area (Insert this arch called "dungeon_magic" everywhere). This is not required, but it makes the place much more safe. </UL>'
5770 root 1.3 },
5771     Scroll => {
5772 root 1.7 attr => [
5773     [
5774     'level',
5775     {
5776     desc => 'The spell of the scroll will be casted at this level. This value should always be set, at least to 1.',
5777     name => 'casting level',
5778     type => 'int'
5779     }
5780     ],
5781     [
5782     'sp',
5783     {
5784     desc => 'When a player/monster applies this scroll, the selected <spell> will be casted (once). This should work for any given spell.',
5785     name => 'spell',
5786     type => 'spell'
5787     }
5788     ],
5789     [
5790     'startequip',
5791     {
5792     desc => 'A godgiven item vanishes as soon as the player drops it to the ground.',
5793     name => 'godgiven item',
5794     type => 'bool'
5795     }
5796     ]
5797     ],
5798 root 1.3 desc => 'Scrolls contain spells (similar to spell-potions). Unlike potions, scrolls require a certain literacy skill to read successfully. Accordingly, for a successful reading, a small amount of experience is gained. Scrolls allow only one time usage, but usually they are sold in bulks.',
5799     ignore => [
5800     'title'
5801     ],
5802 root 1.5 name => 'Scroll',
5803 root 1.3 use => 'For low level quests, scrolls of healing/curing-spells can be a nice reward. At higher levels, scrolls become less and less useful.'
5804     },
5805     Shield => {
5806 root 1.7 attr => [
5807     [
5808     'magic',
5809     {
5810     desc => '<magic bonus> works just like ac, except that it can be improved by "scrolls of Enchant Armour" or reduced by acid. It is less useful than direct armour-class bonus on the shield.',
5811     name => 'magic bonus',
5812     type => 'int'
5813     }
5814     ]
5815     ],
5816 root 1.3 desc => 'Wearing a shield, the object\'s stats will directly be inherited to the player. Shields usually provide good defense, only surpassed by brestplate armour. Resistances on shields aren\'t uncommon either.',
5817     import => [
5818 root 1.29 'Amulet'
5819 root 1.3 ],
5820 root 1.5 name => 'Shield',
5821 root 1.3 use => 'Feel free to create your own special artifacts. However, it is very important that you keep your artifact in balance with existing maps.'
5822     },
5823     'Shooting Weapon' => {
5824 root 1.7 attr => [
5825     [
5826     'race',
5827     {
5828     desc => 'Only projectiles with matching <ammunition class> can be fired with this weapon. For normal bows set "arrows", for normal crossbows set "crossbow bolts". In certain cases, the ammunition class is displayed in the game. Hence, when you create a new ammunition class, choose an intuitive name like "missiles", "spirit bolts" - whatever.',
5829     name => 'ammunition class',
5830     type => 'string'
5831     }
5832     ],
5833     [
5834     'sp',
5835     {
5836     desc => 'After shooting a projectile, the player is frozen for a short period of time (to prevent shooting arrows machine-gun-like). The greater <shooting speed>, the shorter this period of time. 1 is minimum (=worst) and 100 is maximum (=best) value. You shouldn\'t set <shooting speed> lower than 10. YOU MUST NOT SET IT TO ZERO! (That would freeze the player for eternety).',
5837     name => 'shooting speed',
5838     type => 'int'
5839     }
5840     ],
5841     [
5842     'dam',
5843     {
5844     desc => 'The <base damage> significantly affects the damage done by using this weapon. This damage is added to the projectile damage and then (if <ignore strength> disabled) a bonus according to the player\'s strength is added.',
5845     name => 'base damage',
5846     type => 'int'
5847     }
5848     ],
5849     [
5850     'wc',
5851     {
5852     desc => 'This value is supposed to be the base <weaponclass>, but it seems to have rather little effect. High values are good here, low values bad.',
5853     name => 'weaponclass',
5854     type => 'int'
5855     }
5856     ],
5857     [
5858     'item_power',
5859     {
5860 root 1.37 desc => 'The <item power> value measures how "powerful" an artifact is. Players will only be able to wear equipment with a certain total amount of <item power>, depending on their own level. This is the only way to prevent low level players to wear "undeserved" equipment (like gifts from other players or cheated items). It is very important to adjust the <item power> value carefully for every artifact you create! If zero/unset, the Deliantra server will calculate a provisional value at runtime, but this is never going to be an accurate measurement of <item power>.',
5861 root 1.7 name => 'item power',
5862     type => 'int'
5863     }
5864     ],
5865     [
5866     'no_strength',
5867     {
5868     desc => 'Usually the player\'s strentgh takes effect on the damage done by the shooting weapon. If <ignore strength> is set, the player\'s strength is ignored.',
5869     name => 'ignore strength',
5870     type => 'bool'
5871     }
5872     ],
5873     [
5874     'damned',
5875     {
5876     desc => 'A damned shooting weapon cannot be unwielded unless the curse is removed. Removing damnations is a tick harder than removing curses.',
5877     name => 'damnation',
5878     type => 'bool'
5879     }
5880     ],
5881     [
5882     'cursed',
5883     {
5884     desc => 'A cursed shooting weapon cannot be unwielded unless the curse is removed.',
5885     name => 'curse',
5886     type => 'bool'
5887     }
5888     ],
5889     [
5890     'unique',
5891     {
5892     desc => 'Unique items exist only one time on a server. If the item is taken, lost or destroyed - it\'s gone for good.',
5893     name => 'unique item',
5894     type => 'bool'
5895     }
5896     ],
5897     [
5898     'startequip',
5899     {
5900     desc => 'A godgiven item vanishes as soon as the player drops it to the ground.',
5901     name => 'godgiven item',
5902     type => 'bool'
5903     }
5904     ],
5905     [
5906     'msg',
5907     {
5908     desc => 'This text describes the weapons\'s "story". Every decent artifact weapon should have such a description.',
5909     end => 'endmsg',
5910     name => 'description',
5911     type => 'text'
5912     }
5913     ]
5914     ],
5915 elmex 1.22 desc => 'Shooting weapons like bows/crossbows are used to shoot projectiles (arrows/bolts). Shooting weapons and normal (melee) weapons can be wielded both at the same time. Like with any other equipment, stats/bonuses from shooting weapons are directly inherited to the player. <br><br> It\'s very easy to add new pairs of weapons &amp; projectiles. Just set matching &lt;ammunition class&gt; both for shooting weapon and projectile.',
5916 root 1.5 name => 'Shooting Weapon',
5917 root 1.4 section => [
5918     [
5919     'stats',
5920 root 1.7 [
5921     [
5922     'Str',
5923     {
5924     desc => 'The player\'s strentgh will rise/fall by the given value while wearing this shooting weapon.',
5925     name => 'strength',
5926     type => 'int'
5927     }
5928     ],
5929     [
5930     'Dex',
5931     {
5932     desc => 'The player\'s dexterity will rise/fall by the given value while wearing this shooting weapon.',
5933     name => 'dexterity',
5934     type => 'int'
5935     }
5936     ],
5937     [
5938     'Con',
5939     {
5940     desc => 'The player\'s constitution will rise/fall by the given value while wearing this shooting weapon.',
5941     name => 'constitution',
5942     type => 'int'
5943     }
5944     ],
5945     [
5946     'Int',
5947     {
5948     desc => 'The player\'s intelligence will rise/fall by the given value while wearing this shooting weapon.',
5949     name => 'intelligence',
5950     type => 'int'
5951     }
5952     ],
5953     [
5954     'Pow',
5955     {
5956     desc => 'The player\'s power will rise/fall by the given value while wearing this shooting weapon.',
5957     name => 'power',
5958     type => 'int'
5959     }
5960     ],
5961     [
5962     'Wis',
5963     {
5964     desc => 'The player\'s wisdom will rise/fall by the given value while wearing this shooting weapon.',
5965     name => 'wisdom',
5966     type => 'int'
5967     }
5968     ],
5969     [
5970     'Cha',
5971     {
5972     desc => 'The player\'s charisma will rise/fall by the given value while wearing this shooting weapon.',
5973     name => 'charisma',
5974     type => 'int'
5975     }
5976     ]
5977     ]
5978     ],
5979     [
5980     'bonus',
5981     [
5982     [
5983     'luck',
5984     {
5985     desc => 'With positive luck bonus, the player is more likely to succeed in all sorts of things (spellcasting, praying,...). Unless the <luck bonus> is very high, the effect will be barely visible in-game. Luck bonus on one piece of equipment should never exceed 3, and such bonus should not be too frequently available.',
5986     name => 'luck bonus',
5987     type => 'int'
5988     }
5989     ],
5990     [
5991     'magic',
5992     {
5993     desc => '<Magic bonus> improves the quality of the shooting weapon. I\'m not sure what exactly is increased - maybe weaponclass? However, <magic bonus> seems to have a little bit of positive influence on your chance to hit.',
5994     name => 'magic bonus',
5995     type => 'int'
5996     }
5997     ]
5998     ]
5999     ]
6000     ],
6001 elmex 1.22 use => 'Shooting weapons should not add bonuses in general. There\'s already enough "equipment-slots" doing that: swords, rings, amulets, girdles etc. Shooting weapons should especially not add bonuses to the player that have nothing to do with schooting. A Wisdom bonus on a bow is crap for example! A name like "Longbow of great Wisdom" doesn\'t help - still crap.'
6002 root 1.7 },
6003     'Shop Floor' => {
6004     attr => [
6005     [
6006     'is_floor',
6007     {
6008     type => 'fixed',
6009     value => 1
6010     }
6011     ],
6012     [
6013     'no_pick',
6014     {
6015     type => 'fixed',
6016     value => 1
6017     }
6018     ],
6019     [
6020     'no_magic',
6021     {
6022     type => 'fixed',
6023     value => 1
6024     }
6025     ],
6026     [
6027     'auto_apply',
6028 root 1.4 {
6029 root 1.7 desc => 'If enabled, items will appear on this square when the map is loaded. You need to specify a <treasurelist> to define what kinds of items are generated. The items will be unpaid.',
6030     name => 'generate goods',
6031     type => 'bool'
6032 root 1.4 }
6033     ],
6034     [
6035 root 1.7 'randomitems',
6036     {
6037     desc => 'This entry determines what kind of treasure will appear, when <generate goods> is enabled. Look into /crossfire/share/crossfire/treasures for details about existing treasurelists.',
6038     name => 'treasurelist',
6039     type => 'treasurelist'
6040     }
6041     ],
6042     [
6043     'exp',
6044     {
6045     desc => 'The <quality level> will be used for the quality of the generated goods. If zero/unset, <quality level> 5 is used. Usually this value doesn\'t need to be set, unless you want extraordinarily good/bad quality. If you want to make a shop with very high quality, meaybe charge an entrance fee, or make the shop hard-to-come-by. Note that <quality level> mainly affects chance of magic bonus and appearance of artifact-items.',
6046     name => 'quality level',
6047     type => 'int'
6048     }
6049     ],
6050     [
6051     'damned',
6052 root 1.4 {
6053 root 1.7 desc => 'If enabled, it is impossible for players to use prayers on that spot. It also prevents players from saving. (Remember that <no magic> is always set for shop floors.)',
6054     name => 'no prayers',
6055     type => 'bool'
6056 root 1.4 }
6057     ]
6058     ],
6059 root 1.3 desc => 'Shop floor is used for shops. It acts like a combination of the common floor- and the treasure type: When the map is loaded, randomitems (depending on the setings) are generated on it. These items are all flagged as unpaid. When a player drops an item onto shop floor, the item becomes unpaid and the player receives payment according to the item\'s selling-value. Shopfloor always prevents magic (To hinder players from burning or freezing the goods).',
6060     ignore => [
6061     $IGNORE_LIST{non_pickable}
6062     ],
6063 root 1.5 name => 'Shop Floor',
6064 root 1.3 use => 'Tile your whole shop-interior space which shop floor. (That assures players receive payment for dropping items). Place shop mats to enter/leave the shop, and make sure there is no other exit than the shop mat.'
6065     },
6066 elmex 1.27 'Shop Inventory' => {
6067     attr => [
6068     [
6069     'shop_coords',
6070     {
6071     desc => 'The format of this field is: \'x1,y1,x2,y2\'. It defines a rectangle on the map that will be searched for unpaid items.',
6072     name => 'shop rectangle',
6073     type => 'string'
6074     }
6075     ]
6076     ],
6077     desc => 'The purpose of a sign is to display the contents of a shop.',
6078     ignore => [
6079     $IGNORE_LIST{non_pickable}
6080     ],
6081     name => 'Shop Inventory',
6082     use => 'Use these signs to present the player a list of the items in the shop'
6083     },
6084 root 1.3 'Shop Mat' => {
6085 root 1.7 attr => [
6086     [
6087     'no_pick',
6088     {
6089     type => 'fixed',
6090     value => 1
6091     }
6092     ],
6093     [
6094 root 1.14 'move_on',
6095 root 1.7 {
6096 root 1.14 desc => 'Which movement types automatically (as opposed to manually) activate this object.',
6097 root 1.58 name => 'movement on',
6098 elmex 1.26 type => 'movement_type'
6099 root 1.7 }
6100     ]
6101     ],
6102 root 1.3 desc => 'Shop mats are used for entering/leaving shops. You should always have exactly TWO shop mats on your shop-map: One inside the "shopping-area" and one outside. Shop mats don\'t use exit paths/ or -destinations. When stepping onto a shopmat the player gets beamed to the nearest other mat. If the player has unpaid items in his inventory, the price gets charged from his coins automatically. If the player has insufficient coins to buy his unpaid items, he is unable to pass any shopmat (So he has to drop unpaid items).',
6103     ignore => [
6104     $IGNORE_LIST{non_pickable}
6105     ],
6106 root 1.5 name => 'Shop Mat',
6107 root 1.3 use => 'As stated above, always place TWO shop mats into your shop. Not more and not less than that.'
6108     },
6109     'Sign & MagicMouth' => {
6110 root 1.7 attr => [
6111     [
6112     'connected',
6113     {
6114     desc => 'When a connection value is set, the message will be printed whenever the connection is triggered. This should be used in combination with <invisible> enabled and <activate by walking/flying> disabled. If activating your magic_mouth this way, the message will not only be printed to one player, but all players on the current map.',
6115     name => 'connection',
6116 root 1.50 type => 'string'
6117 root 1.7 }
6118     ],
6119     [
6120 elmex 1.21 'activate_on_push',
6121     {
6122     desc => 'Whether the teleporter should only be activated on push.',
6123 root 1.42 name => 'activate on push',
6124 elmex 1.21 type => 'bool'
6125     }
6126     ],
6127     [
6128     'activate_on_release',
6129     {
6130     desc => 'Whether the teleporter should only be activated on release.',
6131 root 1.42 name => 'activate on release',
6132 elmex 1.21 type => 'bool'
6133     }
6134     ],
6135     [
6136 root 1.14 'move_on',
6137 root 1.7 {
6138 root 1.14 desc => 'Which movement types automatically (as opposed to manually) activate this object.',
6139 root 1.58 name => 'movement on',
6140 elmex 1.26 type => 'movement_type'
6141 root 1.7 }
6142     ],
6143     [
6144     'food',
6145     {
6146     desc => 'If a counter-value is set (greater zero), the sign/magic_mouth can be applied (printing the message) only that many times. For signs this really shouldn\'t be used, while for magic_mouths it is extremely helpful. Monsters walking over the magic_mouth do not decrease the counter. Often, you might want to have a message displayed only one time. For example: The player enters your map and you put a magic_mouth to tell him about the monsters and how dangerous they look and all. Later, when all the monsters are killed and the player leaves the map, displaying the same message a second time would be silly. <counter> 1 does a perfect job in such cases. Otherwise set <counter> zero/unset for infinite use (that is the default).',
6147     name => 'counter',
6148     type => 'int'
6149     }
6150     ],
6151     [
6152     'msg',
6153     {
6154     desc => 'This text will be displayed to the player.',
6155     end => 'endmsg',
6156     name => 'message',
6157     type => 'text'
6158     }
6159     ]
6160     ],
6161     desc => 'The purpose of a sign or magic_mouth is to display a certain message to the player. There are three ways to have the player get this message: The player walking onto it (-&gt; magic_mouth), the player pressing &lt;a&gt;pply (-&gt; sign) or the player triggering a button/handle/etc (-&gt; magic_mouth).',
6162     ignore => [
6163     $IGNORE_LIST{non_pickable}
6164     ],
6165     name => 'Sign & MagicMouth',
6166     use => 'Use signs and magic_mouths, plenty of them! Place magic_mouths to add some true roleplay feeling to your maps, support your storyline or give hints about hidden secrets/dangers. Place signs to provide the player with all kinds of useful information for getting along in your maps.'
6167     },
6168     Skill => {
6169     attr => [
6170     [
6171     'invisible',
6172     {
6173     type => 'fixed',
6174     value => 1
6175     }
6176     ],
6177     [
6178     'no_drop',
6179     {
6180     type => 'fixed',
6181     value => 1
6182     }
6183     ],
6184     [
6185     'skill',
6186     {
6187     desc => 'The <skill name> is used for matchings. When a usable object has an identical <skill name>, players (or monsters) will need this skill to apply/use the object.',
6188     name => 'skill name',
6189     type => 'string'
6190     }
6191     ],
6192     [
6193     'expmul',
6194     {
6195     desc => 'This is the ratio of experience the players total should increase by when this skill is used. If this is zero, then experience only goes to to the skill. Values higher than 1 are allowed. Note that experience rewarded to the players total is in addition to that given to the skill. Eg, if player should get 500 exp for using a skill, and expmul is 1, the player will get 500 added to that skill as well as 500 to their total.',
6196     name => 'exp multiplier',
6197     type => 'float'
6198     }
6199     ],
6200     [
6201     'subtype',
6202     {
6203 root 1.36 desc => 'The <skill type> defines the base functionality of the skill. Skill types are hardcoded in the Deliantra server. It isn\'t hard to create new skill types, but it requires a bit of server-coding.',
6204 root 1.7 name => 'skill type',
6205     type => 'list',
6206     value => $LIST{skill_type}
6207     }
6208     ],
6209     [
6210     'level',
6211     {
6212     name => 'level',
6213     type => 'int'
6214     }
6215     ],
6216     [
6217     'exp',
6218     {
6219     name => 'experience',
6220     type => 'int'
6221     }
6222     ],
6223     [
6224     'can_use_skill',
6225     {
6226     desc => 'The <is native skill> flag has an effect only when this skill object is placed in the inventory of a monster (or player). If it is set, the monster or player knows the skill natively, which means he does not need a skill tool to use it.',
6227     name => 'is native skill',
6228     type => 'bool'
6229     }
6230     ]
6231 root 1.3 ],
6232     desc => 'Skills are objects which exist in the player/monster inventory. Both NPC/monsters and players use the same skill archetypes. Not all skills are enabled for monster use however.',
6233     ignore => [
6234     $IGNORE_LIST{system_object}
6235     ],
6236 root 1.5 name => 'Skill',
6237 root 1.3 use => 'For mapmaking, Skill objects serve two purposes: <p>First, the predefined skill archtypes (in the \'skills\' directory) can be seen as the global skill definitions. A skill which doesn\'t exists as an archtype cannot be learned or used by players. When you want to use skills in your maps, you may need to look up the &lt;skill name&gt;s of defined skill archtypes, because those strings are used as a reference in many skill-related objects. </p><p> Secondly, in order to enable monsters to use skills, you will need to copy default skill archtypes into the monsters\' inventories. You can even customize the skills by changing stats. It is not recommended however, to use skills in your maps which are totally unrelated to any predefined skill archtype.</p>'
6238     },
6239     'Skill Scroll' => {
6240 root 1.7 attr => [
6241     [
6242     'race',
6243     {
6244     type => 'fixed',
6245     value => 'scrolls'
6246     }
6247     ],
6248     [
6249     'skill',
6250     {
6251     desc => 'The <skill name> matches the skill object that can be learned from this scroll.',
6252     name => 'skill name',
6253     type => 'string'
6254     }
6255     ]
6256     ],
6257 root 1.3 desc => 'By reading a skill scroll, a player has a chance to learn the contained skill.',
6258 root 1.5 name => 'Skill Scroll',
6259 root 1.3 use => 'Skill scrolls are very much sought for by players. Currently, all skill scrolls are sold in shops randomly, which is in fact not a good system. It would be nice to have some cool quests with skill scrolls rewarded at the end.'
6260     },
6261 elmex 1.33 'Skill Tool' => {
6262     attr => [
6263     [
6264     'skill',
6265     {
6266     desc => 'This field describes which skill the player will be able to use wearing this item.',
6267     name => 'skill name',
6268     type => 'string'
6269     }
6270     ]
6271     ],
6272     desc => 'Wearing a skill tool will give the player the ability to use a skill.',
6273     name => 'Skill Tool',
6274     section => [
6275     [
6276     'stats',
6277     [
6278     [
6279     'Str',
6280     {
6281     desc => 'The player\'s strentgh will rise/fall by the given value for permanent (of course there is an upper limit). Generally there shouldn\'t be stat potions granting more than one stat. Cursed potions will subtract the stats if positive.',
6282     name => 'strength',
6283     type => 'int'
6284     }
6285     ],
6286     [
6287     'Dex',
6288     {
6289     desc => 'The player\'s strentgh will rise/fall by the given value for permanent (of course there is an upper limit). Generally there shouldn\'t be stat potions granting more than one stat. Cursed potions will subtract the stats if positive.',
6290     name => 'dexterity',
6291     type => 'int'
6292     }
6293     ],
6294     [
6295     'Con',
6296     {
6297     desc => 'The player\'s strentgh will rise/fall by the given value for permanent (of course there is an upper limit). Generally there shouldn\'t be stat potions granting more than one stat. Cursed potions will subtract the stats if positive.',
6298     name => 'constitution',
6299     type => 'int'
6300     }
6301     ],
6302     [
6303     'Int',
6304     {
6305     desc => 'The player\'s strentgh will rise/fall by the given value for permanent (of course there is an upper limit). Generally there shouldn\'t be stat potions granting more than one stat. Cursed potions will subtract the stats if positive.',
6306     name => 'intelligence',
6307     type => 'int'
6308     }
6309     ],
6310     [
6311     'Pow',
6312     {
6313     desc => 'The player\'s strentgh will rise/fall by the given value for permanent (of course there is an upper limit). Generally there shouldn\'t be stat potions granting more than one stat. Cursed potions will subtract the stats if positive.',
6314     name => 'power',
6315     type => 'int'
6316     }
6317     ],
6318     [
6319     'Wis',
6320     {
6321     desc => 'The player\'s strentgh will rise/fall by the given value for permanent (of course there is an upper limit). Generally there shouldn\'t be stat potions granting more than one stat. Cursed potions will subtract the stats if positive.',
6322     name => 'wisdom',
6323     type => 'int'
6324     }
6325     ],
6326     [
6327     'Cha',
6328     {
6329     desc => 'The player\'s strentgh will rise/fall by the given value for permanent (of course there is an upper limit). Generally there shouldn\'t be stat potions granting more than one stat. Cursed potions will subtract the stats if positive.',
6330     name => 'charisma',
6331     type => 'int'
6332     }
6333     ]
6334     ]
6335     ],
6336     [
6337     'resistance',
6338     [
6339     [
6340     'resist_physical',
6341     {
6342     desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
6343     name => 'resist physical %',
6344     type => 'int'
6345     }
6346     ],
6347     [
6348     'resist_magic',
6349     {
6350     desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
6351     name => 'resist magic %',
6352     type => 'int'
6353     }
6354     ],
6355     [
6356     'resist_fire',
6357     {
6358     desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
6359     name => 'resist fire %',
6360     type => 'int'
6361     }
6362     ],
6363     [
6364     'resist_electricity',
6365     {
6366     desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
6367     name => 'resist electricity %',
6368     type => 'int'
6369     }
6370     ],
6371     [
6372     'resist_cold',
6373     {
6374     desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
6375     name => 'resist cold %',
6376     type => 'int'
6377     }
6378     ],
6379     [
6380     'resist_acid',
6381     {
6382     desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
6383     name => 'resist acid %',
6384     type => 'int'
6385     }
6386     ],
6387     [
6388     'resist_confusion',
6389     {
6390     desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
6391     name => 'resist confusion %',
6392     type => 'int'
6393     }
6394     ],
6395     [
6396     'resist_weaponmagic',
6397     {
6398     desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
6399     name => 'resist weaponmagic %',
6400     type => 'int'
6401     }
6402     ],
6403     [
6404     'resist_ghosthit',
6405     {
6406     desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
6407     name => 'resist ghosthit %',
6408     type => 'int'
6409     }
6410     ],
6411     [
6412     'resist_slow',
6413     {
6414     desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
6415     name => 'resist slow %',
6416     type => 'int'
6417     }
6418     ],
6419     [
6420     'resist_fear',
6421     {
6422     desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
6423     name => 'resist fear %',
6424     type => 'int'
6425     }
6426     ],
6427     [
6428     'resist_death',
6429     {
6430     desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
6431     name => 'resist death-attack %',
6432     type => 'int'
6433     }
6434     ],
6435     [
6436     'resist_chaos',
6437     {
6438     desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
6439     name => 'resist chaos %',
6440     type => 'int'
6441     }
6442     ],
6443     [
6444     'resist_blind',
6445     {
6446     desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
6447     name => 'resist blinding %',
6448     type => 'int'
6449     }
6450     ],
6451     [
6452     'resist_holyword',
6453     {
6454     desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
6455     name => 'resist holy power %',
6456     type => 'int'
6457     }
6458     ],
6459     [
6460     'resist_godpower',
6461     {
6462     desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
6463     name => 'resist godpower %',
6464     type => 'int'
6465     }
6466     ],
6467     [
6468     'resist_paralyze',
6469     {
6470     desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
6471     name => 'resist paralyze %',
6472     type => 'int'
6473     }
6474     ],
6475     [
6476     'resist_drain',
6477     {
6478     desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
6479     name => 'resist draining %',
6480     type => 'int'
6481     }
6482     ],
6483     [
6484     'resist_deplete',
6485     {
6486     desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
6487     name => 'resist depletion %',
6488     type => 'int'
6489     }
6490     ],
6491     [
6492     'resist_poison',
6493     {
6494     desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
6495     name => 'resist poison %',
6496     type => 'int'
6497     }
6498     ]
6499     ]
6500     ]
6501     ],
6502     use => 'Feel free to assign resistancies and stats to a skill tools or change the skill that is given.'
6503     },
6504 root 1.3 'Special Key' => {
6505 root 1.7 attr => [
6506     [
6507     'slaying',
6508     {
6509     desc => 'This string must be identical with the <key string> in the locked door, then it can be unlocked. It can also be used to trigger inventory checkers.',
6510     name => 'key string',
6511     type => 'string'
6512     }
6513     ],
6514     [
6515     'material',
6516     {
6517     desc => 'For Special Keys, material should always be unset or set to Adamantite. This prevents the key from getting burned or otherwise destroyed.',
6518     name => 'material',
6519     type => 'bitmask',
6520     value => $BITMASK{material}
6521     }
6522     ],
6523     [
6524     'unique',
6525     {
6526     desc => 'Unique items exist only one time on a server. If the item is taken, lost or destroyed - it\'s gone for good. This can be used if you want to sell apartments on your map: Simply sell a unique passport/key, and place an inventory checker at the entrance of your apartment.',
6527     name => 'unique item',
6528     type => 'bool'
6529     }
6530     ],
6531     [
6532     'startequip',
6533     {
6534     desc => 'A godgiven item vanishes as soon as the player drops it to the ground.',
6535     name => 'godgiven item',
6536     type => 'bool'
6537     }
6538     ],
6539     [
6540     'msg',
6541     {
6542     desc => 'This will add a description to the object. The player can read this text by clicking on the item in his inventory. Use this message to describe what the key/passport is good for. A player might have 50 different keys on his key-ring. Don\'t expect players to recall their purpose just by their names.',
6543     end => 'endmsg',
6544     name => 'description',
6545     type => 'text'
6546     }
6547     ]
6548     ],
6549 root 1.3 desc => 'When carrying the appropriate special key, a locked door can be opened. The key will dissapear. <br><br> This object-type can also be used for "passport"-like items: When walking onto an invetory checker, a gate for example might get opened. The "passport" will stay in the player\'s inventory.',
6550     ignore => [
6551     'material'
6552     ],
6553 root 1.5 name => 'Special Key',
6554 root 1.3 use => 'How to make a "passport": You take the special key arch (archetype name is "key2"), set the face to something like card.111 and the name to "passport" - that\'s all. The &lt;key string&gt; certainly must match with the appropiate inventory checker. <br><br> Of course you can be creative with names and faces of key-objects. A "mysterious crystal" or a "big dragon claw" (with appropriate faces) appear more interesting than just a "strange key", or "passport".'
6555     },
6556     Spell => {
6557 root 1.7 attr => [
6558     [
6559     'no_drop',
6560     {
6561     type => 'fixed',
6562     value => 1
6563     }
6564     ],
6565     [
6566     'invisible',
6567     {
6568     type => 'fixed',
6569     value => 1
6570     }
6571     ],
6572     [
6573     'skill',
6574     {
6575     desc => 'The <skill name> matches the skill which is needed to cast this spell. This should be one out of "sorcery", "pyromancy", "evocation", "summoning" or "praying". If you want to fiddle with these, please take care not to upset the concept and balance of the various skills.',
6576     name => 'skill name',
6577     type => 'string'
6578     }
6579     ],
6580     [
6581     'subtype',
6582     {
6583     desc => 'The <spell type> defines the basic type of spell. Some of these types are of a more generic nature than others.',
6584     name => 'spell type',
6585     type => 'list',
6586     value => $LIST{spell_type}
6587     }
6588     ],
6589     [
6590     'level',
6591     {
6592     name => 'spell level',
6593     type => 'int'
6594     }
6595     ],
6596     [
6597     'casting_time',
6598     {
6599     name => 'casting time',
6600     type => 'int'
6601     }
6602     ],
6603     [
6604     'duration',
6605     {
6606     name => 'duration',
6607     type => 'int'
6608     }
6609     ],
6610     [
6611     'other_arch',
6612     {
6613     name => 'create object',
6614     type => 'string'
6615     }
6616     ],
6617     [
6618     'sp',
6619     {
6620     name => 'cost spellpoints',
6621     type => 'int'
6622     }
6623     ],
6624     [
6625     'grace',
6626     {
6627     name => 'cost grace',
6628     type => 'int'
6629     }
6630     ],
6631     [
6632     'maxsp',
6633     {
6634     name => 'double cost per level',
6635     type => 'int'
6636     }
6637     ]
6638     ],
6639 root 1.3 desc => 'Spell objects define a spell. When a spell is put in a spellbook, players can learn it by reading the book. Once learned, players can use the spell as often as they like. With increasing skill level of the player, spells may gain power but also increase cost.<br> Monsters can use spells which are put in their inventory (provided that certain "enabling" settings are correct). The monster\'s &lt;treasurelist&gt; can also be used to provide it with spells.',
6640     ignore => [
6641     $IGNORE_LIST{system_object}
6642     ],
6643 root 1.5 name => 'Spell',
6644 root 1.3 use => 'A lot of the spells\' settings can be tuned and customized. When creating new spells which are accessible to players, it is important to think about balance. A single spell which is too powerful and/or too easy to use can eventually toss the whole skill and magic school system out of whack. Testing new spells is quite important therefore.'
6645     },
6646     Spellbook => {
6647 root 1.7 attr => [
6648     [
6649     'skill',
6650     {
6651     type => 'fixed',
6652     value => 'literacy'
6653     }
6654     ],
6655     [
6656     'randomitems',
6657     {
6658     desc => 'There are two ways to put spells into a spellbook: 1. Put a spell object in the books inventory. In this case, treasurelist must be set to <none>. 2. Choose a treasurelist which contains spells. In that way, a spell will be chosen randomly from the list.',
6659     name => 'treasurelist',
6660     type => 'treasurelist'
6661     }
6662     ],
6663     [
6664     'startequip',
6665     {
6666     desc => 'A godgiven item vanishes as soon as the player drops it to the ground.',
6667     name => 'godgiven item',
6668     type => 'bool'
6669     }
6670     ],
6671     [
6672     'msg',
6673     {
6674     desc => 'This text may contain a nice description of the spellbook\'s cover or something.',
6675     end => 'endmsg',
6676     name => 'description',
6677     type => 'text'
6678     }
6679     ]
6680     ],
6681 root 1.3 desc => 'By reading a spellbook, the player has a chance of learning the contained spell. Once learned from a book, the spell is available forever. Spellbooks with high level spells require some skill-level to read.<br><br> You can create widely customized spells only by adjusting the spell object in the spellbooks inventory. Refer to the description of spell objects for detailed information how to customize spells.<br> If you want to have a random spellbook instead, choose a &lt;treasurelist&gt; with a compilation of spells that the book may contain.',
6682 root 1.5 name => 'Spellbook',
6683 root 1.3 use => 'Don\'t put any of the godgiven spells into a spellbook! These are reserved for the followers of the appropriate cults. Handing them out in a spellbook would violate the balance between different religions. <br><br> Note that there is no fundamental difference between the spellbooks of varying schools (pyromancy, sorcery, evocation, summoning, and even praying). The difference lies only in the spells they contain. It is up to you, the mapmaker, to pick the right type of book for your spells.'
6684     },
6685     Spinner => {
6686 root 1.7 attr => [
6687     [
6688     'sp',
6689     {
6690     desc => 'The spinner will change the direction of flying objects by 45 degrees per <direction number>. Negative values spin clockwise, positive values counter clockwise. Example: <direction number> -2 means spin 90 degrees clockwise.',
6691     name => 'direction number',
6692     type => 'int'
6693     }
6694     ],
6695     [
6696 root 1.14 'move_on',
6697 root 1.7 {
6698 root 1.14 desc => 'Which movement types automatically (as opposed to manually) activate this object.',
6699 root 1.58 name => 'movement on',
6700 elmex 1.26 type => 'movement_type'
6701 root 1.7 }
6702     ]
6703     ],
6704 root 1.3 desc => 'Spinners change the direction of spell objects and other projectiles that fly past. Unlike directors, it does make a difference from what angle you shoot into the spinner. The direction of objects flying past is always changed by a certain degree.',
6705     ignore => [
6706     $IGNORE_LIST{non_pickable}
6707     ],
6708 root 1.5 name => 'Spinner',
6709 root 1.3 use => 'Spinners are very rarely used. I believe they are quite confusing and pointless. The only use I can think of is building some puzzle about where to shoot into spinners to shoot somewhere you otherwise couldn\'t. When placing spinners on a map with magic walls, make sure the spell- projectiles from magic walls don\'t get to fly in loops.'
6710     },
6711     Swamp => {
6712 root 1.7 attr => [
6713     [
6714     'is_floor',
6715     {
6716     type => 'fixed',
6717     value => 1
6718     }
6719     ],
6720     [
6721     'is_wooded',
6722     {
6723     type => 'fixed',
6724     value => 1
6725     }
6726     ],
6727     [
6728     'speed',
6729     {
6730     desc => 'The higher the <drowning speed>, the faster will players and items sink into the swamp. Swamp with very high <drowning speed> can be a nasty and unexpected death-trap. Players should get a warning before such areas.',
6731     name => 'drowning speed',
6732     type => 'float'
6733     }
6734     ],
6735     [
6736 root 1.17 'speed_left',
6737     {
6738     desc => 'The speed left to the object. On every tick, if this value is higher than 0, the object acts/triggers/moves etc. and the value gets decremented by 1. Otherwise, it is incremented by <speed> on every tick.',
6739     name => 'speed left',
6740     type => 'float'
6741     }
6742     ],
6743     [
6744 root 1.14 'move_on',
6745     {
6746     desc => 'Which movement types automatically (as opposed to manually) activate this object.',
6747 root 1.58 name => 'movement on',
6748 elmex 1.26 type => 'movement_type'
6749 root 1.14 }
6750     ],
6751     [
6752     'move_block',
6753 root 1.7 {
6754 root 1.14 desc => 'Objects using these movement types cannot move over this space.',
6755     name => 'blocked movement',
6756 elmex 1.26 type => 'movement_type'
6757 root 1.14 }
6758     ],
6759     [
6760     'move_allow',
6761     {
6762     desc => 'Objects using these movement types are allowed to move over this space. Takes precedence over \'blocked movements\'.',
6763     name => 'allowed movement',
6764 elmex 1.26 type => 'movement_type'
6765 root 1.14 }
6766     ],
6767     [
6768     'move_slow',
6769     {
6770     desc => 'The types of movement that should by slowed down by the \'slow movement penalty\'.',
6771     name => 'slowed movement',
6772 elmex 1.26 type => 'movement_type'
6773 root 1.14 }
6774     ],
6775     [
6776     'move_slow_penalty',
6777     {
6778     desc => 'If <slow movement> is set to a value greater zero, all creatures matching \'slow move\' will be slower than normal on this spot. <slow movement> 1 - rough terrain <slow movement> 2 - very rough terrain ... <slow movement> 5 - default for deep swamp ... <slow movement> 7 - spider web (sticky as hell)',
6779     name => 'slow movement penalty',
6780 root 1.7 type => 'int'
6781     }
6782     ],
6783     [
6784     'no_magic',
6785     {
6786     desc => 'If enabled, it is impossible for players to use (wizard-) spells on that spot.',
6787     name => 'no spells',
6788     type => 'bool'
6789     }
6790     ],
6791     [
6792     'damned',
6793     {
6794     desc => 'If enabled, it is impossible for players to use prayers on that spot. It also prevents players from saving.',
6795     name => 'no prayers',
6796     type => 'bool'
6797     }
6798     ]
6799     ],
6800 root 1.3 desc => 'Swamp areas show a special behaviour: When a player stands still on a swamp-square for too long, he will start to sink in and eventually drown and die. Items dropped on the swamp sink in and dissapear. Players with knowledge of the woodsman skill are a lot less likely to die in the swamp.',
6801     ignore => [
6802     $IGNORE_LIST{non_pickable}
6803 root 1.5 ],
6804     name => 'Swamp'
6805 root 1.3 },
6806     Teleporter => {
6807 root 1.7 attr => [
6808     [
6809     'slaying',
6810     {
6811     desc => 'The exit path specifies the map that the player is transferred to. <exit path> can be an absolute path, beginning with \'/\' (for example "/peterm/FireTemple/fire1"). It can also be a relative path, not beginning with \'/\' (On the map "/peterm/FireTemple/Fire2" for example I could use the relative path "Fire1"). Use relative paths whenever possible! Note that upper/lower case must always be set correctly. However, please use lower case only. If the <exit path> is set, ONLY players can get teleported. If the <exit path> is unset (empty), anything can get teleported: Players, monsters and items. In this case, the destined map is automatically the same map the teleporter is on.',
6812     name => 'exit path',
6813     type => 'string'
6814     }
6815     ],
6816     [
6817     'hp',
6818     {
6819     desc => 'The exit destinations define the (x, y)-coordinates where the exit leads to. If both are set to zero and <exit path> is empty, the player will get teleported to another, randomly chosen teleporter on the same map (Slightly confusing for the player though). Make sure there actually *is* a second one in that case. If both are set to zero and <exit path> is set, the player will be transferred to the "default enter location" of the destined map. The latter can be set in the map-properties as "Enter X/Y". Though, please DO NOT use that. It turned out to be a source for numerous map-bugs.',
6820     name => 'destination X',
6821     type => 'int'
6822     }
6823     ],
6824     [
6825     'sp',
6826     {
6827     desc => 'The exit destinations define the (x, y)-coordinates where the exit leads to. If both are set to zero and <exit path> is empty, the player will get teleported to another, randomly chosen teleporter on the same map (Slightly confusing for the player though). Make sure there actually *is* a second one in that case. If both are set to zero and <exit path> is set, the player will be transferred to the "default enter location" of the destined map. The latter can be set in the map-properties as "Enter X/Y". Though, please DO NOT use that. It turned out to be a source for numerous map-bugs.',
6828     name => 'destination Y',
6829     type => 'int'
6830     }
6831     ],
6832     [
6833     'connected',
6834     {
6835     desc => 'If a connection value is set, the teleporter will be activated whenever the connection is triggered. To use this properly, <activation speed> must be zero.',
6836     name => 'connection',
6837 root 1.50 type => 'string'
6838 root 1.7 }
6839     ],
6840     [
6841 elmex 1.21 'activate_on_push',
6842     {
6843     desc => 'Whether the teleporter should only be activated on push.',
6844 root 1.42 name => 'activate on push',
6845 elmex 1.21 type => 'bool'
6846     }
6847     ],
6848     [
6849     'activate_on_release',
6850     {
6851     desc => 'Whether the teleporter should only be activated on release.',
6852 root 1.42 name => 'activate on release',
6853 elmex 1.21 type => 'bool'
6854     }
6855     ],
6856     [
6857 root 1.7 'speed',
6858     {
6859     desc => 'If the <activation speed> is nonzero, the teleporter will automatically be activated in regular time-intervals. Hence, the player can just step on it and gets teleported sooner or later. The duration between two activates depends on the given value. Default in the teleporter arch is <activation speed> 0.1. VERY IMPORTANT: If you want to have your teleporter activated via button/handle/magic_ear/etc, you must set <activation speed> to zero!',
6860     name => 'activation speed',
6861     type => 'float'
6862     }
6863 root 1.17 ],
6864     [
6865     'speed_left',
6866     {
6867     desc => 'The speed left to the object. On every tick, if this value is higher than 0, the object acts/triggers/moves etc. and the value gets decremented by 1. Otherwise, it is incremented by <speed> on every tick.',
6868     name => 'speed left',
6869     type => 'float'
6870     }
6871 root 1.7 ]
6872     ],
6873 root 1.3 desc => 'When the player walks into a teleporter, he is transferred to a different location. The main difference to the object-type exit is the possibility to have teleporters connected to levers/buttons/etc. Sometimes teleporters are activated even against the players will. <br><br> Unlike exits, teleporters can also transfer items and monsters to different locations on the same map.',
6874     ignore => [
6875     $IGNORE_LIST{non_pickable}
6876     ],
6877 root 1.5 name => 'Teleporter',
6878 root 1.3 use => 'When creating maps, I guess sooner or later you\'ll want to have an invisible teleporter. If using "invisible 1", the teleporter can still be discovered with the show_invisible spell. And in some cases you can\'t place it under the floor to prevent this. <br><br> Fortunately, there is a cool trick to make a perfectly invisible teleporter: You simply add teleporter functionality to the floor itself. That means: You take the floor arch (e.g. "flagstone"), set "type 41", and add slaying/hp/sp/connected... everything you need.'
6879     },
6880 root 1.8 'Timed Gate' => {
6881     attr => [
6882     [
6883     'no_pick',
6884     {
6885     type => 'fixed',
6886     value => 1
6887     }
6888     ],
6889     [
6890     'connected',
6891     {
6892     desc => 'Whenever the inventory checker is triggered, all objects with identical <connection> value get activated. This only makes sense together with <blocking passage> disabled. If unset, the gate opens automatically after some time.',
6893     name => 'connection',
6894 root 1.50 type => 'string'
6895 root 1.8 }
6896     ],
6897     [
6898 elmex 1.21 'activate_on_push',
6899     {
6900     desc => 'Whether the teleporter should only be activated on push.',
6901 root 1.42 name => 'activate on push',
6902 elmex 1.21 type => 'bool'
6903     }
6904     ],
6905     [
6906     'activate_on_release',
6907     {
6908     desc => 'Whether the teleporter should only be activated on release.',
6909 root 1.42 name => 'activate on release',
6910 elmex 1.21 type => 'bool'
6911     }
6912     ],
6913     [
6914 root 1.8 'wc',
6915     {
6916     desc => 'The <position state> defines the position of the gate: Zero means completely open/down, the "number of animation-steps" (usually about 6 or 7) means completely closed/up state. I suggest you don\'t mess with this value - Leave the default in place.',
6917     name => 'position state',
6918     type => 'int'
6919     }
6920     ],
6921     [
6922 root 1.14 'move_block',
6923     {
6924     desc => 'Objects using these movement types cannot move over this space.',
6925     name => 'blocked movement',
6926 elmex 1.26 type => 'movement_type'
6927 root 1.14 }
6928     ],
6929     [
6930     'move_allow',
6931     {
6932     desc => 'Objects using these movement types are allowed to move over this space. Takes precedence over \'blocked movements\'.',
6933     name => 'allowed movement',
6934 elmex 1.26 type => 'movement_type'
6935 root 1.14 }
6936     ],
6937     [
6938     'move_slow',
6939 root 1.8 {
6940 root 1.14 desc => 'The types of movement that should by slowed down by the \'slow movement penalty\'.',
6941     name => 'slowed movement',
6942 elmex 1.26 type => 'movement_type'
6943 root 1.14 }
6944     ],
6945     [
6946     'move_slow_penalty',
6947     {
6948     desc => 'If <slow movement> is set to a value greater zero, all creatures matching \'slow move\' will be slower than normal on this spot. <slow movement> 1 - rough terrain <slow movement> 2 - very rough terrain ... <slow movement> 5 - default for deep swamp ... <slow movement> 7 - spider web (sticky as hell)',
6949     name => 'slow movement penalty',
6950     type => 'int'
6951 root 1.8 }
6952     ],
6953     [
6954     'no_magic',
6955     {
6956     desc => 'Restricting the use of spells to pass this gate. This has an effect only if <block view> is disabled.',
6957     name => 'restrict spells',
6958     type => 'bool'
6959     }
6960     ],
6961     [
6962     'damned',
6963     {
6964     desc => 'Restricting the use of prayers to pass this door. This has an effect only if <block view> is disabled.',
6965     name => 'restrict prayers',
6966     type => 'bool'
6967     }
6968     ],
6969     [
6970     'hp',
6971     {
6972     desc => 'Defines the duration the gate remains closed. This only takes effect if the gate is not connected.',
6973     name => 'open duration',
6974     type => 'int'
6975     }
6976     ]
6977     ],
6978 root 1.36 desc => 'Gates play an important role in Deliantra. Gates can be opened by activating a button/trigger, by speaking passwords (-> magic_ear) or carrying special key-objects (-> inventory checker). Unlike locked doors, gates can get shut again after a player has passed, which makes them more practical in many cases. Unlike normal gates, timed gates open when triggered but automatically close again after some time.',
6979 root 1.8 ignore => [
6980     $IGNORE_LIST{non_pickable}
6981     ],
6982     name => 'Timed Gate',
6983     use => 'Use gates to divide your maps into separated areas. After solving area A, the player gains access to area B, and so on. Make your maps more complex than "one-way".'
6984     },
6985 elmex 1.51 Torch => {
6986     attr => [
6987     [
6988 elmex 1.59 'is_lightable',
6989     {
6990     desc => 'This flag controls whether the torch can be lit up again using a lighter or whether it can only be used once, in which case they can be enabled by simply applying them without any special tools.',
6991     name => 'reignitable',
6992     type => 'bool'
6993     }
6994     ],
6995     [
6996 elmex 1.51 'food',
6997     {
6998     desc => 'This field specifies the burning duration of the torch.',
6999     name => 'burning duration',
7000     type => 'int'
7001     }
7002     ],
7003     [
7004     'range',
7005     {
7006     desc => 'This field sets the glow radius of the torch if it is enabled. If you want to make a torch that is already burning set the "glow radius" field.',
7007     name => 'enabled glow radius',
7008     type => 'int'
7009     }
7010 elmex 1.52 ],
7011     [
7012     'level',
7013     {
7014     desc => 'If this field specyfies the cursed effect\'s level. If it is 0 no cursed effect will be generate. See also the "cursed" flag.',
7015     name => 'level',
7016     type => 'int'
7017     }
7018     ],
7019     [
7020     'cursed',
7021     {
7022     desc => 'Cursed torches, which have a level above 0, explode if the player applies them.',
7023     name => 'cursed',
7024     type => 'bool'
7025     }
7026 elmex 1.51 ]
7027     ],
7028 elmex 1.59 desc => 'Torches are a special kind of Lamp that offer the option of lighting them up without using a lighter (These torches are usually called \'pyrophor torches\'. See also the \'reignitable\' setting). The other kind of torches, that are reignitable, can be put out and put on again using a lighter.',
7029 elmex 1.51 name => 'Torch'
7030     },
7031 root 1.3 Trap => {
7032 root 1.7 attr => [
7033     [
7034     'no_pick',
7035     {
7036     type => 'fixed',
7037     value => 1
7038     }
7039     ],
7040     [
7041 root 1.14 'move_on',
7042 root 1.7 {
7043 root 1.14 desc => 'Which movement types automatically (as opposed to manually) activate this object.',
7044 root 1.58 name => 'movement on',
7045 elmex 1.26 type => 'movement_type'
7046 root 1.7 }
7047     ],
7048     [
7049     'level',
7050     {
7051     desc => 'Level effects how easily a trap may be found and disarmed, and how much experience the player gets for doing so. Beware: High level traps can be quite a cheap source of experience! So either make them tough, or keep the level low.',
7052     name => 'trap level',
7053     type => 'int'
7054     }
7055     ],
7056     [
7057     'Cha',
7058     {
7059     desc => 'This value determines what fraction of the time the trap is visible: It\'ll be randomly visible 1/<visibility> of the time. Also effects how easily the trap may be found.',
7060     name => 'visibility',
7061     type => 'int'
7062     }
7063     ],
7064     [
7065     'hp',
7066     {
7067     desc => 'The trap will detonate <number of charges> times before disappearing.',
7068     name => 'number of charges',
7069     type => 'int'
7070     }
7071     ],
7072     [
7073     'dam',
7074     {
7075     desc => '<direct damage> specifies how much damage is done by the trap. This should be set in reasonable relation to the trap\'s level.',
7076     name => 'direct damage',
7077     type => 'int'
7078     }
7079     ],
7080     [
7081     'attacktype',
7082     {
7083     desc => 'This attribute defines what attacktype to use for direct damage when the trap detonates.',
7084     name => 'attacktype',
7085     type => 'bitmask',
7086     value => $BITMASK{attacktype}
7087     }
7088     ],
7089     [
7090     'connected',
7091     {
7092     desc => 'When the trap is detonated, all objects with the same connection value get activated.',
7093     name => 'connection',
7094 root 1.50 type => 'string'
7095 root 1.7 }
7096     ],
7097     [
7098     'msg',
7099     {
7100     desc => 'When the trap detonates, this text is displayed to the victim. For especially powerful or complex traps, create an appropriate and thrilling description. ;)',
7101     end => 'endmsg',
7102     name => 'detonation text',
7103     type => 'text'
7104     }
7105     ]
7106     ],
7107 root 1.3 desc => 'A trap is a object that can either do damage or trigger another connected object when detonated. Traps are like runes except they are not magical in nature, and generally have either a physical attack or trigger a reaction. <br><br> Traps hit any monster or person who steps on them for \'dam\' damage in \'attacktype\' attacktype and/or trigger a reaction. <br><br> Many traps are already defined in the archetypes.',
7108     ignore => [
7109     'no_pick',
7110     'title',
7111     'name_pl',
7112     'weight',
7113     'value',
7114     'material',
7115     'unpaid'
7116     ],
7117 root 1.5 name => 'Trap',
7118 root 1.3 use => 'Avoid monsters stepping on your traps. For example, a party of orcs setting off your lightning wall and pit trap is usually a bad idea.'
7119     },
7120     Trapdoor => {
7121 root 1.7 attr => [
7122     [
7123     'no_pick',
7124     {
7125     type => 'fixed',
7126     value => 1
7127     }
7128     ],
7129     [
7130 root 1.14 'move_on',
7131 root 1.7 {
7132 root 1.14 desc => 'Which movement types automatically (as opposed to manually) activate this object.',
7133 root 1.58 name => 'movement on',
7134 elmex 1.26 type => 'movement_type'
7135 root 1.7 }
7136     ],
7137     [
7138     'weight',
7139     {
7140     desc => 'This value defines how much weight the trapdoor can hold. Once items or creatures are gathered on the trapdoor, with a total weight surpassing this value, then the trapdoor will open and things start falling through.',
7141     name => 'hold weight',
7142     type => 'int'
7143     }
7144     ],
7145     [
7146     'hp',
7147     {
7148     desc => 'The trapdoor will transport creatures (and items) randomly into a two-square radius of the destination coordinates. If the destination square becomes blocked, the trapdoor will act like being filled up and not work anymore!',
7149     name => 'destination X',
7150     type => 'int'
7151     }
7152     ],
7153     [
7154     'sp',
7155     {
7156     desc => 'The trapdoor will transport creatures (and items) randomly into a two-square radius of the destination coordinates. If the destination square becomes blocked, the trapdoor will act like being filled up and not work anymore!',
7157     name => 'destination Y',
7158     type => 'int'
7159     }
7160     ]
7161     ],
7162 root 1.3 desc => 'Trapdoors are very similar to pits. The difference is that they can not be closed. Instead, the weight of the object on the trapdoor determines weither it slams the trapdoor open and falls through or not.<br> Once a trapdoor has been opened (by a creature or items of sufficient weight,) it remains open, acting like an opened pit.',
7163     ignore => [
7164     $IGNORE_LIST{non_pickable}
7165     ],
7166 root 1.5 name => 'Trapdoor',
7167 root 1.3 use => 'Trapdoors should be used in the same fashion as pits: They should always drop the victims to some kind of lower level. They are not supposed to be used to randomly interconnect maps like teleporters.'
7168     },
7169     Treasure => {
7170 root 1.7 attr => [
7171     [
7172     'randomitems',
7173     {
7174     desc => 'This entry determines what kind of treasure will appear. Look into /crossfire/share/crossfire/treasures for details about existing treasurelists.',
7175     name => 'treasurelist',
7176     type => 'treasurelist'
7177     }
7178     ],
7179     [
7180     'auto_apply',
7181     {
7182     desc => '"Auto-generate" must be set in order to have the treasure be created when the map is loaded. If you want to create a random treasure chest, you unset this flag. That way, the player has to apply the object (the chest), then the treasure is generated.',
7183     name => 'auto-generate',
7184     type => 'bool'
7185     }
7186     ],
7187     [
7188     'hp',
7189     {
7190     desc => '"Create number" specifies how many pieces of the given treasurelist will appear. Note that for every piece there is a chance that nothing is generated. Also, sometimes there can be stacks of items generated, like for gems/money.',
7191     name => 'create number',
7192     type => 'int'
7193     }
7194     ],
7195     [
7196     'exp',
7197     {
7198     desc => 'The <quality level> will be used for the quality of the generated treasure instead of the map difficulty (as was done with shops). If zero/unset, the map difficulty will instead be used. (Example for comparison: Shop floors generate treasure of <quality level> 5 per default).',
7199     name => 'quality level',
7200     type => 'int'
7201     }
7202     ]
7203     ],
7204 root 1.3 desc => 'A treasure-object turns into certain randomitems when the map is loaded into the game.',
7205     ignore => [
7206     'nrof',
7207     'title',
7208     'name_pl',
7209     'weight',
7210     'value',
7211     'material'
7212     ],
7213 root 1.5 name => 'Treasure',
7214 root 1.3 use => 'About usage of the "random-artifact" treasurelist: This will generate powerful stuff like girdles, xray helmets, special swords etc. If you put this as reward to your quest, players might be motivated to do it more than once. BUT, by doing so they will get a huge number of different artifacts! Besides, players will always seek the place with the most easy-to-get random artifact and ignore all others. My advice: Don\'t use it! Attract players with good fighting experience (from monsters), potions, spellbooks, money, and non-random artifacts.'
7215     },
7216     'Trigger Marker' => {
7217 root 1.7 attr => [
7218     [
7219     'no_pick',
7220     {
7221     type => 'fixed',
7222     value => 1
7223     }
7224     ],
7225     [
7226     'slaying',
7227     {
7228     desc => 'The <key string> can be detected by inv. checkers/detectors. If the player already has a force with that <key string>, there won\'t be inserted a second one.',
7229     name => 'key string',
7230     type => 'string'
7231     }
7232     ],
7233     [
7234     'connected',
7235     {
7236     desc => 'Unlike a regular marker this is the connection that triggers this marker to activate.',
7237     name => 'connection',
7238 root 1.50 type => 'string'
7239 root 1.7 }
7240     ],
7241     [
7242     'food',
7243     {
7244     desc => 'This value defines the duration of the force it inserts. If nonzero, the duration of the player\'s mark is finite: about 1 food per 10 seconds. <mark duration> zero/unset means the mark will stay on the player forever.',
7245     name => 'mark duration',
7246     type => 'int'
7247     }
7248     ],
7249     [
7250     'name',
7251     {
7252     desc => 'When the player steps onto the marker, all existing forces in the players inventory with a <key string> matching <delete mark> will be removed. If you don\'t want to remove any marks, leave this textfield empty. Note that the string <delete mark> is set as the name of this marker. So don\'t be confused, and remember changing the name will take effect on the marker\'s functionality.',
7253     name => 'delete mark',
7254     type => 'string'
7255     }
7256     ],
7257     [
7258     'msg',
7259     {
7260     desc => 'In the moment when the player gets marked, this text is displayed to him. You should really set a message in any marker you create, because it\'s the only way for the player to notice what\'s going on.',
7261     end => 'endmsg',
7262     name => 'marking message',
7263     type => 'text'
7264     }
7265     ]
7266     ],
7267 root 1.62 desc => 'A trigger marker is an object that inserts an invisible force (a mark) into a player stepping on it WHEN TRIGGERED. This force does nothing except containing a &lt;key string&gt; which can be discovered by detectors or inventory checkers. It is also possible to use markers for removing marks again. (by setting the "name" slot to the name of the marker to be removed). <br><br> Note that the player has no possibility to "see" his own marks, except by the effect that they cause on the maps.',
7268 root 1.3 ignore => [
7269     $IGNORE_LIST{system_object}
7270     ],
7271 root 1.5 name => 'Trigger Marker',
7272 root 1.3 use => 'Markers hold real cool possibilities for map-making. I encourage you to use them frequently. However there is one negative point about markers: Players don\'t "see" what\'s going on with them. It is your task, as map-creator, to make sure the player is always well informed and never confused. <br><br> Please avoid infinite markers when they aren\'t needed. They\'re using a little space in the player file after all, so if there is no real purpose, set an expire time.'
7273     },
7274     Wall => {
7275 root 1.7 attr => [
7276     [
7277 root 1.14 'move_block',
7278     {
7279     desc => 'Objects using these movement types cannot move over this space.',
7280     name => 'blocked movement',
7281 elmex 1.26 type => 'movement_type'
7282 root 1.14 }
7283     ],
7284     [
7285     'move_allow',
7286     {
7287     desc => 'Objects using these movement types are allowed to move over this space. Takes precedence over \'blocked movements\'.',
7288     name => 'allowed movement',
7289 elmex 1.26 type => 'movement_type'
7290 root 1.14 }
7291     ],
7292     [
7293     'move_slow',
7294 root 1.7 {
7295 root 1.14 desc => 'The types of movement that should by slowed down by the \'slow movement penalty\'.',
7296     name => 'slowed movement',
7297 elmex 1.26 type => 'movement_type'
7298 root 1.14 }
7299     ],
7300     [
7301     'move_slow_penalty',
7302     {
7303     desc => 'If <slow movement> is set to a value greater zero, all creatures matching \'slow move\' will be slower than normal on this spot. <slow movement> 1 - rough terrain <slow movement> 2 - very rough terrain ... <slow movement> 5 - default for deep swamp ... <slow movement> 7 - spider web (sticky as hell)',
7304     name => 'slow movement penalty',
7305     type => 'int'
7306 root 1.7 }
7307     ],
7308     [
7309     'can_roll',
7310     {
7311     desc => 'If set, the object is able to "roll", so it can be pushed around. This setting is used for boulders and barrels.',
7312     name => 'moveable',
7313     type => 'bool'
7314     }
7315     ],
7316     [
7317     'no_magic',
7318     {
7319     desc => 'This takes effect only with <blocksview> disabled. Restricting the use of spells to pass this wall.',
7320     name => 'restrict spells',
7321     type => 'bool'
7322     }
7323     ],
7324     [
7325     'damned',
7326     {
7327     desc => 'This takes effect only with <blocksview> disabled. Restricting the use of spells to pass this wall.',
7328     name => 'restrict prayers',
7329     type => 'bool'
7330     }
7331     ]
7332     ],
7333 root 1.3 desc => 'Walls usually block passage and sight.',
7334     ignore => [
7335     'nrof',
7336     'title',
7337     'name_pl',
7338     'value',
7339     'unpaid'
7340     ],
7341 root 1.19 name => 'Wall'
7342 root 1.3 },
7343     'Wand & Staff' => {
7344 root 1.7 attr => [
7345     [
7346     'sp',
7347     {
7348     desc => 'The <spell> specifies the contained spell.',
7349     name => 'spell',
7350     type => 'spell'
7351     }
7352     ],
7353     [
7354     'level',
7355     {
7356     desc => 'The <casting level> of the wand determines it\'s power. An average level for wands in shops is about 10.',
7357     name => 'casting level',
7358     type => 'int'
7359     }
7360     ],
7361     [
7362     'food',
7363     {
7364     desc => 'The wand can be used <number of charges> times before it is used up. It can be recharged with scrolls of charging.',
7365     name => 'number of charges',
7366     type => 'int'
7367     }
7368     ],
7369     [
7370     'startequip',
7371     {
7372     desc => 'A godgiven item vanishes as soon as the player drops it to the ground.',
7373     name => 'godgiven item',
7374     type => 'bool'
7375     }
7376     ],
7377     [
7378     'msg',
7379     {
7380     desc => 'This text may contain a description of the wand.',
7381     end => 'endmsg',
7382     name => 'description',
7383     type => 'text'
7384     }
7385     ]
7386     ],
7387 root 1.3 desc => 'Wands contain a certain spell. The player can apply (ready) and fire the wand. After a defined number of casts, the wand is "used up". It is possible to recharge a wand with scrolls of charging, but usually that isn\'t worth the cost.',
7388 root 1.5 name => 'Wand & Staff',
7389 root 1.9 use => 'Wands are quite seldomly used. The reason prolly is that they\'re generally not cost-efficient. Handing out high-level wands with powerful special spells isn\'t a good idea either, because of the recharge ability. <br><br> For low levels, staffs of healing/cure and word of recall are quite desirable though. Ideal rewards for low level quests.'
7390 root 1.3 },
7391     'Weak Wall' => {
7392 root 1.7 attr => [
7393     [
7394     'alive',
7395     {
7396     type => 'fixed',
7397     value => 1
7398     }
7399     ],
7400     [
7401     'no_pick',
7402     {
7403     type => 'fixed',
7404     value => 1
7405     }
7406     ],
7407     [
7408     'tear_down',
7409     {
7410     type => 'fixed',
7411     value => 1
7412     }
7413     ],
7414     [
7415     'race',
7416     {
7417     desc => 'For weak walls, <race> should always be set to "wall", unless you create something fancy like a building which is in fact meant to be a huge animal. Note that shovels slay walls, so they do tripple damage against weak walls.',
7418     name => 'race',
7419     type => 'string'
7420     }
7421     ],
7422     [
7423     'level',
7424     {
7425     desc => 'The <level> of a weak wall works similar to monster levels. Due to the fact that weak walls cannot attack, the level is much less important though.',
7426     name => 'level',
7427     type => 'int'
7428     }
7429     ],
7430     [
7431     'hp',
7432     {
7433     desc => 'The <health points> of a weak wall define how long it takes to tear it down. With every successful hit from an opponent, <health points> get drained.',
7434     name => 'health points',
7435     type => 'int'
7436     }
7437     ],
7438     [
7439     'maxhp',
7440     {
7441     desc => '<max health> is the maximum amount of <health points> this weak wall can have. Since walls generally don\'t heal, I doubt this has much real effect.',
7442     name => 'max health',
7443     type => 'int'
7444     }
7445     ],
7446     [
7447     'ac',
7448     {
7449     desc => 'Weak walls of high <armour class> are less likely to get hit. <armour class> can be considered the "counterpiece" to <weapon class>.',
7450     name => 'armour class',
7451     type => 'int'
7452     }
7453     ]
7454     ],
7455 root 1.3 desc => 'A weak wall is a breakable spot amidsts a solid wall. Typically these weak walls look similar to their solid "relatives" except for a small crack or little chunks of wall on the ground.',
7456     ignore => [
7457     $IGNORE_LIST{non_pickable}
7458     ],
7459 root 1.5 name => 'Weak Wall',
7460 root 1.4 section => [
7461     [
7462     'resistance',
7463 root 1.7 [
7464     [
7465     'resist_physical',
7466     {
7467     name => 'resist physical %',
7468     type => 'int'
7469     }
7470     ],
7471     [
7472     'resist_magic',
7473     {
7474     name => 'resist magic %',
7475     type => 'int'
7476     }
7477     ],
7478     [
7479     'resist_fire',
7480     {
7481     name => 'resist fire %',
7482     type => 'int'
7483     }
7484     ],
7485     [
7486     'resist_electricity',
7487     {
7488     name => 'resist electricity %',
7489     type => 'int'
7490     }
7491     ],
7492     [
7493     'resist_cold',
7494     {
7495     name => 'resist cold %',
7496     type => 'int'
7497     }
7498     ],
7499     [
7500     'resist_confusion',
7501     {
7502     name => 'resist confusion %',
7503     type => 'int'
7504     }
7505     ],
7506     [
7507     'resist_acid',
7508     {
7509     name => 'resist acid %',
7510     type => 'int'
7511     }
7512     ],
7513     [
7514     'resist_drain',
7515     {
7516     name => 'resist draining %',
7517     type => 'int'
7518     }
7519     ],
7520     [
7521     'resist_weaponmagic',
7522     {
7523     name => 'resist weaponmagic %',
7524     type => 'int'
7525     }
7526     ],
7527     [
7528     'resist_ghosthit',
7529     {
7530     name => 'resist ghosthit %',
7531     type => 'int'
7532     }
7533     ],
7534     [
7535     'resist_poison',
7536     {
7537     name => 'resist poison %',
7538     type => 'int'
7539     }
7540     ],
7541     [
7542     'resist_slow',
7543     {
7544     name => 'resist slow %',
7545     type => 'int'
7546     }
7547     ],
7548     [
7549     'resist_paralyze',
7550     {
7551     name => 'resist paralyze %',
7552     type => 'int'
7553     }
7554     ],
7555     [
7556     'resist_fear',
7557     {
7558     name => 'resist fear %',
7559     type => 'int'
7560     }
7561     ],
7562     [
7563     'resist_deplete',
7564     {
7565     name => 'resist depletion %',
7566     type => 'int'
7567     }
7568     ],
7569     [
7570     'resist_death',
7571     {
7572     name => 'resist death-attack %',
7573     type => 'int'
7574     }
7575     ],
7576     [
7577     'resist_chaos',
7578     {
7579     name => 'resist chaos %',
7580     type => 'int'
7581     }
7582     ],
7583     [
7584     'resist_blind',
7585     {
7586     name => 'resist blinding %',
7587     type => 'int'
7588     }
7589     ],
7590     [
7591     'resist_holyword',
7592     {
7593     name => 'resist holy power %',
7594     type => 'int'
7595     }
7596     ],
7597     [
7598     'resist_godpower',
7599     {
7600     name => 'resist godpower %',
7601     type => 'int'
7602     }
7603     ]
7604     ]
7605 root 1.4 ]
7606     ],
7607 root 1.3 use => 'If you want to create hidden rooms, using weak walls is alot better than completely indiscernible passages in a wall.<br> Anyways, there can be a lot more to weak walls than just finding them: Rising their defensive stats, weak walls can become a serious obstacle. An ice wall might only be torn down by a fire attack for example. A granite wall for instance might be very hard to destroy.'
7608     },
7609     Weapon => {
7610 root 1.7 attr => [
7611     [
7612     'attacktype',
7613     {
7614     desc => 'This number is a bitmask, specifying the weapon\'s attacktypes. Attacktypes are: physical, magical, fire, cold.. etc. Most artifact weapons have no more than one or two attacktypes. Keep in mind that all weapons can be blessed by the player\'s diety, thus adding an additional attacktype. When a player hits a monster with a weapon that has more than one attacktype, then he will do as much damage as the "best" of his attacktypes does. So, the more attacktypes you\'ve got, the better your chance to take advantage of a monster\'s vulnerabilities. (Btw: Same rule applies for monster vs. player.). Attacktypes "magic" and "chaos" are somehow exceptions.',
7615     name => 'attacktype',
7616     type => 'bitmask',
7617     value => $BITMASK{attacktype}
7618     }
7619     ],
7620     [
7621     'weapontype',
7622     {
7623     desc => 'The <weapontype> characterizes the weapon\'s type of physical attack. It could best be considered a "subclassification" of the physical attacktype. For now, this is only used for attack messages! You should always set this correctly when creating new weapons for your maps.',
7624     name => 'weapontype',
7625     type => 'list',
7626     value => $LIST{weapon_type}
7627     }
7628     ],
7629     [
7630     'skill',
7631     {
7632     desc => 'Matching <skill name> of the skill that is required to use this weapon.',
7633     name => 'skill name',
7634     type => 'string'
7635     }
7636     ],
7637     [
7638     'dam',
7639     {
7640     desc => 'The damage value is used as base value for how much damage the weapon does per hit. The actual damage involves more dependencies, like wielder\'s level and defender\'s level. Look at existing weapons to get a feel for the range of weapon damage values.',
7641     name => 'damage',
7642     type => 'int'
7643     }
7644     ],
7645     [
7646     'slaying',
7647     {
7648     desc => 'Slaying means the weapon does tripple (3x) damage to monsters of the specified race. If <slaying race> matches an arch name (e.g. "big_dragon"), only monsters of that archtype are hit with tripple damage. No god blessings are possible for weapons with a race set in this entry (That\'s because god blessings add tripple damage against their own enemy races). Tripple damage is very effective.',
7649     name => 'slaying race',
7650     type => 'string'
7651     }
7652     ],
7653     [
7654     'last_sp',
7655     {
7656     desc => 'The weapon speed determines how often the wielder can swing the weapon during a certain period of time. The lower the faster, <weapon speed> 1 is best (that is lightning- fast). A typical average value is 8. Speed and damage should be kept in reasonable relation.',
7657     name => 'weapon speed',
7658     type => 'int'
7659     }
7660     ],
7661     [
7662     'wc',
7663     {
7664     desc => 'The weapon class value adds to the overall weapon class of the wielder\'s melee attacks. Weapon class improves the chance of hitting the opponent.',
7665     name => 'weapon class',
7666     type => 'int'
7667     }
7668     ],
7669     [
7670     'magic',
7671     {
7672     desc => 'For a weapon, magic bonus works just like weapon class, except that magic bonus can be improved by the gods or reduced by acid. Hence, it is less useful than direct weapon class value on a weapon.',
7673     name => 'magic bonus',
7674     type => 'int'
7675     }
7676     ],
7677     [
7678     'item_power',
7679     {
7680 root 1.37 desc => 'The <item power> value measures how "powerful" an artifact is. Players will only be able to wear equipment with a certain total amount of <item power>, depending on their own level. This is the only way to prevent low level players to wear "undeserved" equipment (like gifts from other players or cheated items). It is very important to adjust the <item power> value carefully for every artifact you create! If zero/unset, the Deliantra server will calculate a provisional value at runtime, but this is never going to be an accurate measurement of <item power>.',
7681 root 1.7 name => 'item power',
7682     type => 'int'
7683     }
7684     ],
7685     [
7686     'damned',
7687     {
7688     desc => 'A damned weapon cannot be unwielded unless the curse is removed. Removing damnations is a tick harder than removing curses.',
7689     name => 'damnation',
7690     type => 'bool'
7691     }
7692     ],
7693     [
7694     'cursed',
7695     {
7696     desc => 'A cursed weapon cannot be unwielded unless the curse is removed.',
7697     name => 'curse',
7698     type => 'bool'
7699     }
7700     ],
7701     [
7702     'lifesave',
7703     {
7704 root 1.9 desc => 'An item with this flag enabled will save the players life for one time: When the player is wearing this item and his health points reach zero, the item disappears, replenishing half of the player\'s health. An item with <save life> should not have any decent additional bonuses!',
7705 root 1.7 name => 'save life',
7706     type => 'bool'
7707     }
7708     ],
7709     [
7710     'unique',
7711     {
7712     desc => 'Unique items exist only one time on a server. If the item is taken, lost or destroyed - it\'s gone for good.',
7713     name => 'unique item',
7714     type => 'bool'
7715     }
7716     ],
7717     [
7718     'startequip',
7719     {
7720     desc => 'A godgiven item vanishes as soon as the player drops it to the ground.',
7721     name => 'godgiven item',
7722     type => 'bool'
7723     }
7724     ],
7725     [
7726     'msg',
7727     {
7728     desc => 'This text describes the weapons\'s "story". Every decent artifact weapon should have such a description.',
7729     end => 'endmsg',
7730     name => 'description',
7731     type => 'text'
7732     }
7733     ]
7734     ],
7735 root 1.3 desc => 'Wielding a weapon, the object\'s stats will directly be inherited to the player. Usually enhancing his fighting-abilities. Non-magical weapons can be improved with scrolls.',
7736 root 1.5 name => 'Weapon',
7737 root 1.4 section => [
7738     [
7739 elmex 1.33 'stats',
7740     [
7741     [
7742     'Str',
7743     {
7744     desc => 'The player\'s strentgh will rise/fall by the given value for permanent (of course there is an upper limit). Generally there shouldn\'t be stat potions granting more than one stat. Cursed potions will subtract the stats if positive.',
7745     name => 'strength',
7746     type => 'int'
7747     }
7748     ],
7749     [
7750     'Dex',
7751     {
7752     desc => 'The player\'s strentgh will rise/fall by the given value for permanent (of course there is an upper limit). Generally there shouldn\'t be stat potions granting more than one stat. Cursed potions will subtract the stats if positive.',
7753     name => 'dexterity',
7754     type => 'int'
7755     }
7756     ],
7757     [
7758     'Con',
7759     {
7760     desc => 'The player\'s strentgh will rise/fall by the given value for permanent (of course there is an upper limit). Generally there shouldn\'t be stat potions granting more than one stat. Cursed potions will subtract the stats if positive.',
7761     name => 'constitution',
7762     type => 'int'
7763     }
7764     ],
7765     [
7766     'Int',
7767     {
7768     desc => 'The player\'s strentgh will rise/fall by the given value for permanent (of course there is an upper limit). Generally there shouldn\'t be stat potions granting more than one stat. Cursed potions will subtract the stats if positive.',
7769     name => 'intelligence',
7770     type => 'int'
7771     }
7772     ],
7773     [
7774     'Pow',
7775     {
7776     desc => 'The player\'s strentgh will rise/fall by the given value for permanent (of course there is an upper limit). Generally there shouldn\'t be stat potions granting more than one stat. Cursed potions will subtract the stats if positive.',
7777     name => 'power',
7778     type => 'int'
7779     }
7780     ],
7781     [
7782     'Wis',
7783     {
7784     desc => 'The player\'s strentgh will rise/fall by the given value for permanent (of course there is an upper limit). Generally there shouldn\'t be stat potions granting more than one stat. Cursed potions will subtract the stats if positive.',
7785     name => 'wisdom',
7786     type => 'int'
7787     }
7788     ],
7789     [
7790     'Cha',
7791     {
7792     desc => 'The player\'s strentgh will rise/fall by the given value for permanent (of course there is an upper limit). Generally there shouldn\'t be stat potions granting more than one stat. Cursed potions will subtract the stats if positive.',
7793     name => 'charisma',
7794     type => 'int'
7795     }
7796     ]
7797     ]
7798     ],
7799     [
7800 root 1.4 'resistance',
7801 root 1.7 [
7802     [
7803     'resist_physical',
7804     {
7805 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
7806 root 1.7 name => 'resist physical %',
7807     type => 'int'
7808     }
7809     ],
7810     [
7811     'resist_magic',
7812     {
7813 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
7814 root 1.7 name => 'resist magic %',
7815     type => 'int'
7816     }
7817     ],
7818     [
7819     'resist_fire',
7820     {
7821 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
7822 root 1.7 name => 'resist fire %',
7823     type => 'int'
7824     }
7825     ],
7826     [
7827     'resist_electricity',
7828     {
7829 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
7830 root 1.7 name => 'resist electricity %',
7831     type => 'int'
7832     }
7833     ],
7834     [
7835     'resist_cold',
7836     {
7837 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
7838 root 1.7 name => 'resist cold %',
7839     type => 'int'
7840     }
7841     ],
7842     [
7843     'resist_acid',
7844     {
7845 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
7846 root 1.7 name => 'resist acid %',
7847     type => 'int'
7848     }
7849     ],
7850     [
7851 elmex 1.33 'resist_confusion',
7852 root 1.7 {
7853 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
7854     name => 'resist confusion %',
7855 root 1.7 type => 'int'
7856     }
7857     ],
7858     [
7859     'resist_weaponmagic',
7860     {
7861 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
7862 root 1.7 name => 'resist weaponmagic %',
7863     type => 'int'
7864     }
7865     ],
7866     [
7867     'resist_ghosthit',
7868     {
7869 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
7870 root 1.7 name => 'resist ghosthit %',
7871     type => 'int'
7872     }
7873     ],
7874     [
7875     'resist_slow',
7876     {
7877 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
7878 root 1.7 name => 'resist slow %',
7879     type => 'int'
7880     }
7881     ],
7882     [
7883     'resist_fear',
7884     {
7885 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
7886 root 1.7 name => 'resist fear %',
7887     type => 'int'
7888     }
7889     ],
7890     [
7891     'resist_death',
7892     {
7893 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
7894 root 1.7 name => 'resist death-attack %',
7895     type => 'int'
7896     }
7897     ],
7898     [
7899     'resist_chaos',
7900     {
7901 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
7902 root 1.7 name => 'resist chaos %',
7903     type => 'int'
7904     }
7905     ],
7906     [
7907     'resist_blind',
7908     {
7909 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
7910 root 1.7 name => 'resist blinding %',
7911     type => 'int'
7912     }
7913     ],
7914     [
7915     'resist_holyword',
7916     {
7917 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
7918 root 1.7 name => 'resist holy power %',
7919     type => 'int'
7920     }
7921     ],
7922     [
7923 elmex 1.33 'resist_godpower',
7924 root 1.7 {
7925 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
7926     name => 'resist godpower %',
7927 root 1.7 type => 'int'
7928     }
7929     ],
7930     [
7931 elmex 1.33 'resist_paralyze',
7932 root 1.7 {
7933 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
7934     name => 'resist paralyze %',
7935 root 1.7 type => 'int'
7936     }
7937     ],
7938     [
7939 elmex 1.33 'resist_drain',
7940 root 1.7 {
7941 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
7942     name => 'resist draining %',
7943 root 1.7 type => 'int'
7944     }
7945     ],
7946     [
7947 elmex 1.33 'resist_deplete',
7948 root 1.7 {
7949 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
7950     name => 'resist depletion %',
7951 root 1.7 type => 'int'
7952     }
7953     ],
7954     [
7955 elmex 1.33 'resist_poison',
7956 root 1.7 {
7957 elmex 1.33 desc => 'The player\'s resistance to physical will rise by this value in percent (range -100 till +100). The effect is only temporare, and it does NOT add on the values from the player\'s equipment. Cursed potions will make negative resistance.. very nasty in combat!',
7958     name => 'resist poison %',
7959 root 1.7 type => 'int'
7960     }
7961     ]
7962     ]
7963 root 1.4 ],
7964     [
7965     'misc',
7966 root 1.7 [
7967     [
7968     'luck',
7969     {
7970     desc => 'With positive luck bonus, the player is more likely to succeed in all sorts of things (spellcasting, praying,...). Unless the <luck bonus> is very high, the effect will be barely visible in-game. Luck bonus on one piece of equipment should never exceed 3, and such bonus should not be too frequently available.',
7971     name => 'luck bonus',
7972     type => 'int'
7973     }
7974     ],
7975     [
7976     'hp',
7977     {
7978     desc => 'Positive <health regen.> bonus speeds up the player\'s healing process. Negative values slow it down.',
7979     name => 'health regen.',
7980     type => 'int'
7981     }
7982     ],
7983     [
7984     'sp',
7985     {
7986     desc => 'Positive <mana regen.> bonus speeds up the player\'s mana regeneration. Negative values slow it down.',
7987     name => 'mana regen.',
7988     type => 'int'
7989     }
7990     ],
7991     [
7992     'grace',
7993     {
7994     desc => 'Positive <grace regen.> bonus speeds up the player\'s grace regeneration. Negative values slow it down. Since grace can be regenerated rather easy with praying, additional <grace regen.> bonus should be VERY RARE!!',
7995     name => 'grace regen.',
7996     type => 'int'
7997     }
7998     ],
7999     [
8000     'food',
8001     {
8002     desc => 'Positive <food bonus> slows down the player\'s digestion, thus he consumes less food. Negative values speed it up. Note that food is consumed not only for "being alive", but also for healing and mana-regeneration. <food bonus> only affects the amount of food consumed for "being alive". Hence, even with high <food bonus>, during a fight a player can run out of food quickly.',
8003     name => 'food bonus',
8004     type => 'int'
8005     }
8006     ],
8007     [
8008     'xrays',
8009     {
8010 root 1.9 desc => 'Xray vision allows the player to see through obstacles in a two-square-wide radius. This is extremely helpful and desirable, so don\'t give it away for cheap on equipment.',
8011 root 1.7 name => 'xray vision',
8012     type => 'bool'
8013     }
8014     ],
8015     [
8016     'stealth',
8017     {
8018     desc => 'Stealth allows the player to move silently. This comes to effect if a player turns himself invisible and tries to sneak around monsters. (At least that was the idea behind it)',
8019     name => 'stealth',
8020     type => 'bool'
8021     }
8022     ],
8023     [
8024     'reflect_spell',
8025     {
8026     desc => 'If a player is wearing any piece of equipment with the ability to <reflect spells>, all kinds of spell-bullets and -beams will bounce off him. This works only about 90% of all times, to avoid players being completely immune to certain types of attacks. This is a very powerful ability and it shouldn\'t be handed out cheap!',
8027     name => 'reflect spells',
8028     type => 'bool'
8029     }
8030     ],
8031     [
8032     'reflect_missile',
8033     {
8034     desc => 'If a player is wearing any piece of equipment with the ability to <reflect missiles>, all kinds of projectiles (e.g. arrows, bolts, boulders) will bounce off him. This works only about 90% of all times, to avoid players being completely immune to certain types of attacks.',
8035     name => 'reflect missiles',
8036     type => 'bool'
8037     }
8038     ],
8039     [
8040     'path_attuned',
8041     {
8042     desc => 'Click on the <attuned paths> button to select spellpaths. The player will get attuned to the specified spellpaths while wearing this weapon.',
8043     name => 'attuned paths',
8044     type => 'bitmask',
8045     value => $BITMASK{spellpath}
8046     }
8047     ],
8048     [
8049     'path_repelled',
8050     {
8051     desc => 'Click on the <repelled paths> button to select spellpaths. The player will get repelled to the specified spellpaths while wearing this weapon.',
8052     name => 'repelled paths',
8053     type => 'bitmask',
8054     value => $BITMASK{spellpath}
8055     }
8056     ],
8057     [
8058     'path_denied',
8059     {
8060     desc => 'Click on the <denied paths> button to select spellpaths. The specified spellpaths will be denied to the player while wearing this weapon.',
8061     name => 'denied paths',
8062     type => 'bitmask',
8063     value => $BITMASK{spellpath}
8064     }
8065     ]
8066     ]
8067 root 1.4 ]
8068     ],
8069 root 1.3 use => 'If you create artifacts (equipment) with stats- or resistance-bonus: Keep playbalance in mind! Such items mustn\'t be reachable without hard fighting AND questing.'
8070 root 1.1 }
8071     );
8072    
8073 root 1.3 our %ATTR = (
8074     3 => $TYPE{Rod},
8075     4 => $TYPE{Treasure},
8076     5 => $TYPE{Potion},
8077     6 => $TYPE{Food},
8078     7 => $TYPE{'Poison Food'},
8079     8 => $TYPE{Book},
8080     9 => $TYPE{Clock},
8081     13 => $TYPE{Projectile},
8082     14 => $TYPE{'Shooting Weapon'},
8083     15 => $TYPE{Weapon},
8084     16 => $TYPE{'Brestplate Armour'},
8085     17 => $TYPE{Pedestal},
8086     18 => $TYPE{Altar},
8087 root 1.57 19 => $TYPE{'Item Match'},
8088 root 1.3 20 => $TYPE{'Locked Door'},
8089     21 => $TYPE{'Special Key'},
8090 root 1.9 23 => $TYPE{Door},
8091     24 => $TYPE{Key},
8092 root 1.8 26 => $TYPE{'Timed Gate'},
8093 root 1.3 27 => $TYPE{'Handle Trigger'},
8094 root 1.9 28 => $TYPE{'Monster (Grimreaper)'},
8095 root 1.3 29 => $TYPE{'Magic Ear'},
8096 root 1.9 30 => $TYPE{'Button Trigger'},
8097 root 1.3 31 => $TYPE{'Altar Trigger'},
8098 root 1.60 32 => $TYPE{'Pedestal Trigger'},
8099 root 1.3 33 => $TYPE{Shield},
8100     34 => $TYPE{Helmet},
8101     35 => $TYPE{Horn},
8102     36 => $TYPE{Money},
8103 root 1.9 37 => $TYPE{'Class Changer'},
8104 root 1.3 39 => $TYPE{Amulet},
8105     40 => $TYPE{Mover},
8106     41 => $TYPE{Teleporter},
8107     42 => $TYPE{Creator},
8108     43 => $TYPE{Skill},
8109     51 => $TYPE{Detector},
8110     52 => $TYPE{'Trigger Marker'},
8111     55 => $TYPE{Marker},
8112     56 => $TYPE{'Holy Altar'},
8113     58 => $TYPE{Battleground},
8114     60 => $TYPE{Jewel},
8115     62 => $TYPE{'Magic Wall'},
8116     64 => $TYPE{'Inventory Checker'},
8117     65 => $TYPE{'Mood Floor'},
8118     66 => $TYPE{Exit},
8119     67 => $TYPE{'Floor (Encounter)'},
8120     68 => $TYPE{'Shop Floor'},
8121     69 => $TYPE{'Shop Mat'},
8122     70 => $TYPE{Ring},
8123     72 => $TYPE{Flesh},
8124     73 => $TYPE{Inorganic},
8125 elmex 1.33 74 => $TYPE{'Skill Tool'},
8126 elmex 1.51 81 => $TYPE{Torch},
8127     82 => $TYPE{Lamp},
8128 root 1.3 83 => $TYPE{Duplicator},
8129     85 => $TYPE{Spellbook},
8130     87 => $TYPE{Cloak},
8131     88 => $TYPE{'Hazard Floor'},
8132     90 => $TYPE{Spinner},
8133     91 => $TYPE{Gate},
8134     92 => $TYPE{Button},
8135     93 => $TYPE{Handle},
8136     94 => $TYPE{Pit},
8137     95 => $TYPE{Trapdoor},
8138     98 => $TYPE{'Sign & MagicMouth'},
8139     99 => $TYPE{Boots},
8140     100 => $TYPE{Gloves},
8141     101 => $TYPE{Spell},
8142     103 => $TYPE{Converter},
8143     104 => $TYPE{Bracers},
8144     106 => $TYPE{Savebed},
8145     109 => $TYPE{'Wand & Staff'},
8146 root 1.54 110 => $TYPE{Inscribable},
8147 root 1.3 111 => $TYPE{Scroll},
8148     112 => $TYPE{Director},
8149     113 => $TYPE{Girdle},
8150 root 1.10 116 => $TYPE{'Event Connector'},
8151 root 1.3 122 => $TYPE{Container},
8152     130 => $TYPE{'Skill Scroll'},
8153     138 => $TYPE{Swamp},
8154 elmex 1.27 150 => $TYPE{'Shop Inventory'},
8155 root 1.3 154 => $TYPE{Rune},
8156     155 => $TYPE{Trap},
8157     156 => $TYPE{'Power Crystal'},
8158 root 1.8 158 => $TYPE{Disease},
8159 elmex 1.23 163 => $TYPE{'Item Transformer'},
8160 root 1.49 164 => $TYPE{'Map Script'},
8161 root 1.45 165 => $TYPE{'Safe ground'},
8162     999 => $TYPE{Ability}
8163 root 1.1 );
8164    
8165 root 1.3 our %TYPENAME = (
8166     0 => '*NONE*',
8167     1 => 'PLAYER',
8168 root 1.9 2 => 'TRANSPORT',
8169 root 1.3 3 => 'ROD',
8170     4 => 'TREASURE',
8171     5 => 'POTION',
8172     6 => 'FOOD',
8173     7 => 'POISON',
8174     8 => 'BOOK',
8175     9 => 'CLOCK',
8176     12 => 'LIGHTNING',
8177     13 => 'ARROW',
8178     14 => 'BOW',
8179     15 => 'WEAPON',
8180     16 => 'ARMOUR',
8181     17 => 'PEDESTAL',
8182     18 => 'ALTAR',
8183     20 => 'LOCKED_DOOR',
8184     21 => 'SPECIAL_KEY',
8185     22 => 'MAP',
8186     23 => 'DOOR',
8187     24 => 'KEY',
8188     26 => 'TIMED_GATE',
8189     27 => 'TRIGGER',
8190     28 => 'GRIMREAPER',
8191     29 => 'MAGIC_EAR',
8192     30 => 'TRIGGER_BUTTON',
8193     31 => 'TRIGGER_ALTAR',
8194     32 => 'TRIGGER_PEDESTAL',
8195     33 => 'SHIELD',
8196     34 => 'HELMET',
8197     35 => 'HORN',
8198     36 => 'MONEY',
8199     37 => 'CLASS',
8200     38 => 'GRAVESTONE',
8201     39 => 'AMULET',
8202     40 => 'PLAYERMOVER',
8203     41 => 'TELEPORTER',
8204     42 => 'CREATOR',
8205     43 => 'SKILL',
8206     44 => 'EXPERIENCE',
8207     45 => 'EARTHWALL',
8208     46 => 'GOLEM',
8209     48 => 'THROWN_OBJ',
8210     49 => 'BLINDNESS',
8211     50 => 'GOD',
8212     51 => 'DETECTOR',
8213     52 => 'TRIGGER_MARKER',
8214     53 => 'DEAD_OBJECT',
8215     54 => 'DRINK',
8216     55 => 'MARKER',
8217     56 => 'HOLY_ALTAR',
8218     57 => 'PLAYER_CHANGER',
8219     58 => 'BATTLEGROUND',
8220     59 => 'PEACEMAKER',
8221     60 => 'GEM',
8222     62 => 'FIREWALL',
8223     63 => 'ANVIL',
8224     64 => 'CHECK_INV',
8225     65 => 'MOOD_FLOOR',
8226     66 => 'EXIT',
8227     67 => 'ENCOUNTER',
8228     68 => 'SHOP_FLOOR',
8229     69 => 'SHOP_MAT',
8230     70 => 'RING',
8231     71 => 'FLOOR',
8232     72 => 'FLESH',
8233     73 => 'INORGANIC',
8234     74 => 'SKILL_TOOL',
8235     75 => 'LIGHTER',
8236     76 => 'TRAP_PART',
8237     77 => 'WALL',
8238     78 => 'LIGHT_SOURCE',
8239     79 => 'MISC_OBJECT',
8240     80 => 'MONSTER',
8241     81 => 'SPAWN_GENERATOR',
8242     82 => 'LAMP',
8243     83 => 'DUPLICATOR',
8244     84 => 'TOOL',
8245     85 => 'SPELLBOOK',
8246     86 => 'BUILDFAC',
8247     87 => 'CLOAK',
8248     90 => 'SPINNER',
8249     91 => 'GATE',
8250     92 => 'BUTTON',
8251     93 => 'CF_HANDLE',
8252     94 => 'HOLE',
8253     95 => 'TRAPDOOR',
8254     98 => 'SIGN',
8255     99 => 'BOOTS',
8256     100 => 'GLOVES',
8257     101 => 'SPELL',
8258     102 => 'SPELL_EFFECT',
8259     103 => 'CONVERTER',
8260     104 => 'BRACERS',
8261     105 => 'POISONING',
8262     106 => 'SAVEBED',
8263     107 => 'POISONCLOUD',
8264     108 => 'FIREHOLES',
8265     109 => 'WAND',
8266 root 1.54 110 => 'INSCRIBABLE',
8267 root 1.3 111 => 'SCROLL',
8268     112 => 'DIRECTOR',
8269     113 => 'GIRDLE',
8270     114 => 'FORCE',
8271     115 => 'POTION_EFFECT',
8272 root 1.11 116 => 'EVENT_CONNECTOR',
8273 root 1.3 121 => 'CLOSE_CON',
8274     122 => 'CONTAINER',
8275     123 => 'ARMOUR_IMPROVER',
8276     124 => 'WEAPON_IMPROVER',
8277     130 => 'SKILLSCROLL',
8278     138 => 'DEEP_SWAMP',
8279     139 => 'IDENTIFY_ALTAR',
8280     150 => 'MENU',
8281     154 => 'RUNE',
8282     155 => 'TRAP',
8283     156 => 'POWER_CRYSTAL',
8284     157 => 'CORPSE',
8285     158 => 'DISEASE',
8286     159 => 'SYMPTOM',
8287     160 => 'BUILDER',
8288 root 1.9 161 => 'MATERIAL',
8289     162 => 'GPS',
8290     163 => 'ITEM_TRANSFORMER',
8291     164 => 'QUEST'
8292 root 1.1 );
8293    
8294     our %SPELL = (
8295 root 1.3 0 => 'magic bullet',
8296     1 => 'small fireball',
8297     2 => 'medium fireball',
8298     3 => 'large fireball',
8299     4 => 'burning hands',
8300     5 => 'small lightning',
8301     6 => 'large lightning',
8302     7 => 'magic missile',
8303     8 => 'create bomb',
8304     9 => 'summon golem',
8305     10 => 'summon fire elemental',
8306     11 => 'summon earth elemental',
8307     12 => 'summon water elemental',
8308     13 => 'summon air elemental',
8309     14 => 'dimension door',
8310     15 => 'create earth wall',
8311     16 => 'paralyze',
8312     17 => 'icestorm',
8313     18 => 'magic mapping',
8314     19 => 'turn undead',
8315     20 => 'fear',
8316     21 => 'poison cloud',
8317     22 => 'wonder',
8318     23 => 'destruction',
8319     24 => 'perceive self',
8320     25 => 'word of recall',
8321     26 => 'invisible',
8322     27 => 'invisible to undead',
8323     28 => 'probe',
8324     29 => 'large bullet',
8325     30 => 'improved invisibility',
8326     31 => 'holy word',
8327     32 => 'minor healing',
8328     33 => 'medium healing',
8329     34 => 'major healing',
8330     35 => 'heal',
8331     36 => 'create food',
8332     37 => 'earth to dust',
8333     38 => 'armour',
8334     39 => 'strength',
8335     40 => 'dexterity',
8336     41 => 'constitution',
8337     42 => 'charisma',
8338     43 => 'create fire wall',
8339     44 => 'create frost wall',
8340     45 => 'protection from cold',
8341     46 => 'protection from electricity',
8342     47 => 'protection from fire',
8343     48 => 'protection from poison',
8344     49 => 'protection from slow',
8345     50 => 'protection from paralysis',
8346     51 => 'protection from draining',
8347     52 => 'protection from magic',
8348     53 => 'protection from attack',
8349     54 => 'levitate',
8350     55 => 'small speedball',
8351     56 => 'large speedball',
8352     57 => 'hellfire',
8353     58 => 'dragonbreath',
8354     59 => 'large icestorm',
8355     60 => 'charging',
8356     61 => 'polymorph',
8357     62 => 'cancellation',
8358     63 => 'confusion',
8359     64 => 'mass confusion',
8360     65 => 'summon pet monster',
8361     66 => 'slow',
8362     67 => 'regenerate spellpoints',
8363     68 => 'cure poison',
8364     69 => 'protection from confusion',
8365     70 => 'protection from cancellation',
8366     71 => 'protection from depletion',
8367     72 => 'alchemy',
8368     73 => 'remove curse',
8369     74 => 'remove damnation',
8370     75 => 'identify',
8371     76 => 'detect magic',
8372     77 => 'detect monster',
8373     78 => 'detect evil',
8374     79 => 'detect curse',
8375     80 => 'heroism',
8376     81 => 'aggravation',
8377     82 => 'firebolt',
8378     83 => 'frostbolt',
8379     84 => 'shockwave',
8380     85 => 'color spray',
8381     86 => 'haste',
8382     87 => 'face of death',
8383     88 => 'ball lightning',
8384     89 => 'meteor swarm',
8385     90 => 'comet',
8386     91 => 'mystic fist',
8387     92 => 'raise dead',
8388     93 => 'resurrection',
8389     94 => 'reincarnation',
8390     95 => 'immunity to cold',
8391     96 => 'immunity to electricity',
8392     97 => 'immunity to fire',
8393     98 => 'immunity to poison',
8394     99 => 'immunity to slow',
8395     100 => 'immunity to paralysis',
8396     101 => 'immunity to draining',
8397     102 => 'immunity to magic',
8398     103 => 'immunity to attack',
8399     104 => 'invulnerability',
8400     105 => 'defense',
8401     106 => 'rune of fire',
8402     107 => 'rune of frost',
8403     108 => 'rune of shocking',
8404     109 => 'rune of blasting',
8405     110 => 'rune of death',
8406     111 => 'marking rune',
8407     112 => 'build director',
8408     113 => 'create pool of chaos',
8409     114 => 'build bullet wall',
8410     115 => 'build lightning wall',
8411     116 => 'build fireball wall',
8412     117 => 'magic rune',
8413     118 => 'rune of magic drain',
8414     119 => 'antimagic rune',
8415     120 => 'rune of transferrence',
8416     121 => 'transferrence',
8417     122 => 'magic drain',
8418     123 => 'counterspell',
8419     124 => 'disarm',
8420     125 => 'cure confusion',
8421     126 => 'restoration',
8422     127 => 'summon evil monster',
8423     128 => 'counterwall',
8424     129 => 'cause light wounds',
8425     130 => 'cause medium wounds',
8426     131 => 'cause serious wounds',
8427     132 => 'charm monsters',
8428     133 => 'banishment',
8429     134 => 'create missile',
8430     135 => 'show invisible',
8431     136 => 'xray',
8432     137 => 'pacify',
8433     138 => 'summon fog',
8434     139 => 'steambolt',
8435     140 => 'command undead',
8436     141 => 'holy orb',
8437     142 => 'summon avatar',
8438     143 => 'holy possession',
8439     144 => 'bless',
8440     145 => 'curse',
8441     146 => 'regeneration',
8442     147 => 'consecrate',
8443     148 => 'summon cult monsters',
8444     149 => 'cause critical wounds',
8445     150 => 'holy wrath',
8446     151 => 'retributive strike',
8447     152 => 'finger of death',
8448     153 => 'insect plague',
8449     154 => 'call holy servant',
8450     155 => 'wall of thorns',
8451     156 => 'staff to snake',
8452     157 => 'light',
8453     158 => 'darkness',
8454     159 => 'nightfall',
8455     160 => 'daylight',
8456     161 => 'sunspear',
8457     162 => 'faery fire',
8458     163 => 'cure blindness',
8459     164 => 'dark vision',
8460     165 => 'bullet swarm',
8461     166 => 'bullet storm',
8462     167 => 'cause many wounds',
8463     168 => 'small snowstorm',
8464     169 => 'medium snowstorm',
8465     170 => 'large snowstorm',
8466     171 => 'cure disease',
8467     172 => 'cause red death',
8468     173 => 'cause flu',
8469     174 => 'cause black death',
8470     175 => 'cause leprosy',
8471     176 => 'cause smallpox',
8472     177 => 'cause white death',
8473     178 => 'cause anthrax',
8474     179 => 'cause typhoid',
8475     180 => 'mana blast',
8476     181 => 'small manaball',
8477     182 => 'medium manaball',
8478     183 => 'large manaball',
8479     184 => 'mana bolt',
8480     185 => 'dancing sword',
8481     186 => 'animate weapon',
8482     187 => 'cause cold',
8483     188 => 'divine shock',
8484     189 => 'windstorm',
8485     190 => 'sanctuary',
8486     191 => 'peace',
8487     192 => 'spiderweb',
8488     193 => 'conflict',
8489     194 => 'rage',
8490     195 => 'forked lightning',
8491     196 => 'poison fog',
8492     197 => 'flaming aura',
8493     198 => 'vitriol',
8494     199 => 'vitriol splash',
8495     200 => 'ironwood skin',
8496     201 => 'wrathful eye',
8497     202 => 'town portal',
8498     203 => 'missile swarm',
8499     204 => 'cause rabies',
8500     205 => 'glyph'
8501 root 1.1 );
8502    
8503    
8504     =head1 AUTHOR
8505    
8506     Marc Lehmann <schmorp.de>
8507     http://home.schmorp.de/
8508    
8509     The source files are part of the CFJavaEditor.
8510    
8511     =cut
8512    
8513     1