ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/Deliantra/Deliantra/Data.pm
Revision: 1.14
Committed: Mon Mar 20 03:31:45 2006 UTC (18 years, 2 months ago) by root
Branch: MAIN
Changes since 1.13: +454 -189 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 =head1 NAME
2    
3     Crossfire::Data - various data structures useful for understanding archs and objects
4    
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.4 package Crossfire::Data;
20    
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     4 => 'Boat'
69     },
70 root 1.3 pick_up => {
71     0 => 'Nothing',
72     1 => 'Wealth',
73     2 => 'Food',
74     3 => 'Weapons',
75     4 => 'Armour',
76     5 => 'Inverse',
77     6 => 'All'
78     },
79     spellpath => {
80     0 => 'Protection',
81     1 => 'Fire',
82     2 => 'Frost',
83     3 => 'Electricity',
84     4 => 'Missiles',
85     5 => 'Self',
86     6 => 'Summoning',
87     7 => 'Abjuration',
88     8 => 'Restoration',
89     9 => 'Detonation',
90     10 => 'Mind',
91     11 => 'Creation',
92     12 => 'Teleportation',
93     13 => 'Information',
94     14 => 'Transmutation',
95     15 => 'Transferrence',
96     16 => 'Turning',
97     17 => 'Wounding',
98     18 => 'Death',
99     19 => 'Light'
100     },
101     will_apply => {
102     0 => 'Apply Handles',
103     1 => 'Open Chests',
104     2 => 'Break Walls',
105     3 => 'Open Doors'
106     }
107     );
108    
109     our %LIST = (
110     direction => {
111     0 => '<none>',
112     1 => 'north',
113     2 => 'northeast',
114     3 => 'east',
115     4 => 'southeast',
116     5 => 'south',
117     6 => 'southwest',
118     7 => 'west',
119     8 => 'northwest'
120     },
121 root 1.10 event_type => {
122     0 => 'none',
123     1 => 'apply',
124     2 => 'attack',
125     3 => 'death',
126     4 => 'drop',
127     5 => 'pickup',
128     6 => 'say',
129     7 => 'stop',
130     8 => 'time',
131     9 => 'throw',
132     10 => 'trigger',
133     11 => 'close',
134     12 => 'timer',
135     28 => 'move'
136     },
137 root 1.3 mood => {
138     0 => 'furious',
139     1 => 'angry',
140     2 => 'calm',
141     3 => 'sleep',
142     4 => 'charm'
143 root 1.1 },
144 root 1.3 potion_effect => {
145     0 => '<none>',
146     65536 => 'life restoration',
147     1048576 => 'improvement'
148 root 1.1 },
149 root 1.3 skill_type => {
150     1 => 'lockpicking',
151     2 => 'hiding',
152     3 => 'smithery',
153     4 => 'bowyer',
154     5 => 'jeweler',
155     6 => 'alchemy',
156     7 => 'stealing',
157     8 => 'literacy',
158     9 => 'bargaining',
159     10 => 'jumping',
160     11 => 'detect magic',
161     12 => 'oratory',
162     13 => 'singing',
163     14 => 'detect curse',
164     15 => 'find traps',
165     16 => 'mediatation',
166     17 => 'punching',
167     18 => 'flame touch',
168     19 => 'karate',
169     20 => 'climbing',
170     21 => 'woodsman',
171     22 => 'inscription',
172     23 => 'one handed weapons',
173     24 => 'missile weapons',
174     25 => 'throwing',
175     26 => 'use magic item',
176     27 => 'disarm traps',
177     28 => 'set traps',
178     29 => 'thaumaturgy',
179     30 => 'praying',
180     31 => 'clawing',
181     32 => 'levitation',
182     33 => 'summoning',
183     34 => 'pyromancy',
184     35 => 'evocation',
185     36 => 'sorcery',
186     37 => 'two handed weapons'
187 root 1.1 },
188 root 1.3 spell_type => {
189     1 => 'raise dead',
190     2 => 'rune',
191     3 => 'make mark',
192     4 => 'bolt',
193     5 => 'bullet',
194     6 => 'explosion',
195     7 => 'cone',
196     8 => 'bomb',
197     9 => 'wonder',
198     10 => 'smite',
199     11 => 'magic missile',
200     12 => 'summon golem',
201     13 => 'dimension door',
202     14 => 'magic mapping',
203     15 => 'magic wall',
204     16 => 'destruction',
205     17 => 'perceive self',
206     18 => 'word of recall',
207     19 => 'invisible',
208     20 => 'probe',
209     21 => 'healing',
210     22 => 'create food',
211     23 => 'earth to dust',
212     24 => 'change ability',
213     25 => 'bless',
214     26 => 'curse',
215     27 => 'summon monster',
216     28 => 'recharge',
217     29 => 'polymorph',
218     30 => 'alchemy',
219     31 => 'remove curse',
220     32 => 'identify',
221     33 => 'detection',
222     34 => 'mood change',
223     35 => 'moving ball',
224     36 => 'swarm',
225     37 => 'charge mana',
226     38 => 'dispel rune',
227     39 => 'create missile',
228     40 => 'consecrate',
229     41 => 'animate weapon',
230     42 => 'light',
231     43 => 'change map light',
232     44 => 'faery fire',
233     45 => 'disease',
234     46 => 'aura',
235     47 => 'town portal'
236 root 1.1 },
237 root 1.3 weapon_type => {
238     0 => '<unknown>',
239     1 => 'sword',
240     2 => 'arrows',
241     3 => 'axe',
242     4 => 'katana',
243     5 => 'knife, dagger',
244     6 => 'whip, chain',
245     7 => 'hammer, flail',
246     8 => 'club, stick'
247     }
248     );
249    
250     our %IGNORE_LIST = (
251     non_pickable => [
252     'value',
253     'nrof',
254     'weight',
255     'name_pl',
256     'material',
257     'no_pick',
258     'unpaid',
259     'title',
260     'identified'
261     ],
262     system_object => [
263     'value',
264     'nrof',
265     'weight',
266     'name_pl',
267     'material',
268     'no_pick',
269     'unpaid',
270     'title',
271     'glow_radius',
272     'identified',
273     'blocksview',
274     'invisible'
275     ]
276     );
277    
278     our %DEFAULT_ATTR = (
279 root 1.7 attr => [
280     [
281     'name',
282     {
283     desc => 'This is the name of the object, displayed to the player.',
284     name => 'name',
285     type => 'string'
286     }
287     ],
288     [
289     'name_pl',
290     {
291     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.',
292     name => 'plural name',
293     type => 'string'
294     }
295     ],
296     [
297     'title',
298     {
299 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.',
300 root 1.7 name => 'title',
301     type => 'string'
302     }
303     ],
304     [
305     'face',
306     {
307     desc => 'The image-name defines what image is displayed for this object in-game.',
308     name => 'image',
309     type => 'string'
310     }
311     ],
312     [
313     'nrof',
314     {
315     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.',
316     name => 'number',
317     type => 'int'
318     }
319     ],
320     [
321     'weight',
322     {
323 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 ;) ).',
324 root 1.7 name => 'weight',
325     type => 'int'
326     }
327     ],
328     [
329     'value',
330     {
331     desc => 'Adds a certain value to the object: It will be worth that many times the default value from it\'s archetype (E.g. "value = 3" means three times worth the default value). Value for buying/selling will be further modified by various factors. Hence, testing values in-game is usually inevitable.',
332     name => 'value',
333     type => 'int'
334     }
335     ],
336     [
337     'glow_radius',
338     {
339 root 1.9 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 4, the higher, the more light does the object emit.',
340 root 1.7 name => 'glow radius',
341     type => 'int'
342     }
343     ],
344     [
345     'material',
346     {
347     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.',
348     name => 'material',
349     type => 'bitmask',
350     value => $BITMASK{material}
351     }
352     ],
353     [
354     'no_pick',
355     {
356     desc => 'If set, the object cannot be picked up (Neither by players nor monsters).',
357     name => 'non-pickable',
358     type => 'bool'
359     }
360     ],
361     [
362     'invisible',
363     {
364     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.',
365     name => 'invisible',
366     type => 'bool'
367     }
368     ],
369     [
370     'blocksview',
371     {
372     desc => 'If an item is set to block view, players (and monsters) cannot see byond it unless they cross it or manage to stand ontop.',
373     name => 'block view',
374     type => 'bool'
375     }
376     ],
377     [
378     'identified',
379     {
380     desc => 'If an item is identified, the player has full knowledge about it.',
381     name => 'identified',
382     type => 'bool'
383     }
384     ],
385     [
386     'unpaid',
387     {
388     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.',
389     name => 'unpaid',
390     type => 'bool'
391     }
392     ]
393     ]
394 root 1.3 );
395    
396     our %TYPE = (
397     Ability => {
398 root 1.7 attr => [
399     [
400     'invisible',
401     {
402     type => 'fixed',
403     value => 1
404     }
405     ],
406     [
407     'no_drop',
408     {
409     type => 'fixed',
410     value => 1
411     }
412     ],
413     [
414     'sp',
415     {
416     desc => 'The monster will use the specified <short range spell> when the player is within 6-square radius (of the monster\'s head).',
417     name => 'short range spell',
418     type => 'spell'
419     }
420     ],
421     [
422     'hp',
423     {
424     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.',
425     name => 'long range spell',
426     type => 'nz_spell'
427     }
428     ],
429     [
430     'maxsp',
431     {
432     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".',
433     name => 'importance',
434     type => 'int'
435     }
436     ],
437     [
438     'attacktype',
439     {
440 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.',
441 root 1.7 name => 'is magical',
442     type => 'bool',
443     value => [
444     0,
445     2
446     ]
447     }
448     ]
449     ],
450 root 1.3 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;.',
451     ignore => [
452     $IGNORE_LIST{system_object}
453     ],
454 root 1.5 name => 'Ability',
455 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?'
456     },
457     Altar => {
458 root 1.7 attr => [
459     [
460     'no_pick',
461     {
462     type => 'fixed',
463     value => 1
464     }
465     ],
466     [
467 root 1.14 'move_on',
468 root 1.7 {
469 root 1.14 desc => 'Which movement types automatically (as opposed to manually) activate this object.',
470     name => 'movement type',
471     type => 'bitmask',
472     value => $BITMASK{movement_type}
473 root 1.7 }
474     ],
475     [
476     'slaying',
477     {
478     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. Remember to put a note somewhere, telling the player what he is expected to drop on the altar. (Often this is put in the altar\'s name: E.g. "drop 100 platinums")',
479     name => 'match item name',
480     type => 'string'
481     }
482     ],
483     [
484     'food',
485     {
486     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.',
487     name => 'drop amount',
488     type => 'int'
489     }
490     ],
491     [
492     'connected',
493     {
494     desc => 'If a connection value is set, the altar will trigger all objects with the same value, when activated. This will only work once.',
495     name => 'connection',
496     type => 'int'
497     }
498     ],
499     [
500     'sp',
501     {
502 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.',
503 root 1.7 name => 'spell',
504     type => 'spell'
505     }
506     ],
507     [
508     'msg',
509     {
510     desc => 'This text will be displayed to the player in the exact moment when the altar is activated.',
511     end => 'endmsg',
512     name => 'message',
513     type => 'text'
514     }
515     ]
516     ],
517 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.',
518 root 1.3 ignore => [
519     $IGNORE_LIST{non_pickable}
520 root 1.5 ],
521     name => 'Altar'
522 root 1.3 },
523     'Altar Trigger' => {
524 root 1.7 attr => [
525     [
526     'no_pick',
527     {
528     type => 'fixed',
529     value => 1
530     }
531     ],
532     [
533     'slaying',
534     {
535     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. Remember to put a note somewhere, telling the player what he is expected to drop on the altar. (Often this is put in the altar\'s name: E.g. "drop 100 platinums")',
536     name => 'match item name',
537     type => 'string'
538     }
539     ],
540     [
541     'food',
542     {
543     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.',
544     name => 'drop amount',
545     type => 'int'
546     }
547     ],
548     [
549     'connected',
550     {
551     desc => 'If a connection value is set, the altar will trigger all objects with the same value, when activated. This will only work once.',
552     name => 'connection',
553     type => 'int'
554     }
555     ],
556     [
557     'sp',
558     {
559 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.',
560 root 1.7 name => 'spell',
561     type => 'spell'
562     }
563     ],
564     [
565     'exp',
566     {
567     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.',
568     name => 'reset time',
569     type => 'int'
570     }
571     ],
572     [
573     'last_sp',
574     {
575     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.',
576     name => 'ignore reset',
577     type => 'bool'
578     }
579     ],
580     [
581 root 1.14 'move_on',
582 root 1.7 {
583 root 1.14 desc => 'Which movement types automatically (as opposed to manually) activate this object.',
584     name => 'movement type',
585     type => 'bitmask',
586     value => $BITMASK{movement_type}
587 root 1.7 }
588     ],
589     [
590     'msg',
591     {
592     desc => 'This text will be displayed to the player in the exact moment when the altar is activated.',
593     end => 'endmsg',
594     name => 'message',
595     type => 'text'
596     }
597     ]
598     ],
599 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.',
600 root 1.3 ignore => [
601     $IGNORE_LIST{non_pickable}
602     ],
603 root 1.5 name => 'Altar Trigger',
604 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. =)'
605     },
606     Amulet => {
607 root 1.7 attr => [
608     [
609     'ac',
610     {
611     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.',
612     name => 'armour class',
613     type => 'int'
614     }
615     ],
616     [
617     'wc',
618     {
619     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.',
620     name => 'weapon class',
621     type => 'int'
622     }
623     ],
624     [
625     'item_power',
626     {
627     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 CF server will calculate a provisional value at runtime, but this is never going to be an accurate measurement of <item power>.',
628     name => 'item power',
629     type => 'int'
630     }
631     ],
632     [
633     'damned',
634     {
635     desc => 'A damned piece of equipment cannot be unwielded unless the curse is removed. Removing damnations is a tick harder than removing curses.',
636     name => 'damnation',
637     type => 'bool'
638     }
639     ],
640     [
641     'cursed',
642     {
643     desc => 'A cursed piece of equipment cannot be unwielded unless the curse is removed.',
644     name => 'curse',
645     type => 'bool'
646     }
647     ],
648     [
649     'lifesave',
650     {
651 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!',
652 root 1.7 name => 'save life',
653     type => 'bool'
654     }
655     ],
656     [
657     'unique',
658     {
659     desc => 'Unique items exist only one time on a server. If the item is taken, lost or destroyed - it\'s gone for good.',
660     name => 'unique item',
661     type => 'bool'
662     }
663     ],
664     [
665     'startequip',
666     {
667     desc => 'A godgiven item vanishes as soon as the player drops it to the ground.',
668     name => 'godgiven item',
669     type => 'bool'
670     }
671     ],
672     [
673     'applied',
674     {
675     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.',
676     name => 'is applied',
677     type => 'bool'
678     }
679     ],
680     [
681     'msg',
682     {
683     desc => 'This text describes the item\'s "story". Every decent artifact should have such a description.',
684     end => 'endmsg',
685     name => 'description',
686     type => 'text'
687     }
688     ]
689     ],
690 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.',
691 root 1.5 name => 'Amulet',
692 root 1.4 section => [
693     [
694     'resistance',
695 root 1.7 [
696     [
697     'resist_physical',
698     {
699     desc => 'This adds physical resistance to the item (= armour value). The number is a percent-value in the range 0-100. Treat this with CARE. Look at other maps and what they require to do for getting this-and-that artifact.',
700     name => 'resist physical %',
701     type => 'int'
702     }
703     ],
704     [
705     'resist_magic',
706     {
707     desc => 'This adds magic resistance to the item. The number is a percent-value in the range 0-100. Treat this with CARE. Look at other maps and what they require to do for getting this-and-that artifact.',
708     name => 'resist magic %',
709     type => 'int'
710     }
711     ],
712     [
713     'resist_fire',
714     {
715     desc => 'This adds fire resistance to the item. The number is a percent-value in the range 0-100. Treat this with CARE. Look at other maps and what they require to do for getting this-and-that artifact.',
716     name => 'resist fire %',
717     type => 'int'
718     }
719     ],
720     [
721     'resist_electricity',
722     {
723     desc => 'This adds electricity resistance to the item. The number is a percent-value in the range 0-100. Treat this with CARE. Look at other maps and what they require to do for getting this-and-that artifact.',
724     name => 'resist electricity %',
725     type => 'int'
726     }
727     ],
728     [
729     'resist_cold',
730     {
731     desc => 'This adds fire resistance to the item. The number is a percent-value in the range 0-100. Treat this with CARE. Look at other maps and what they require to do for getting this-and-that artifact.',
732     name => 'resist cold %',
733     type => 'int'
734     }
735     ],
736     [
737     'resist_confusion',
738     {
739     desc => 'This adds confusion resistance to the item. The number is a percent-value in the range 0-100. Confusion resistance is not very effective unless the value comes close to 100 (= perfect immunity).',
740     name => 'resist confusion %',
741     type => 'int'
742     }
743     ],
744     [
745     'resist_acid',
746     {
747     desc => 'This adds acid resistance to the item. The number is a percent-value in the range 0-100. Treat this with CARE. Look at other maps and what they require to do for getting this-and-that artifact.',
748     name => 'resist acid %',
749     type => 'int'
750     }
751     ],
752     [
753     'resist_drain',
754     {
755     desc => 'This adds draining resistance to the item. The number is a percent-value in the range 0-100. Draining resistance is little effective unless the value is 100 (= perfect immunity).',
756     name => 'resist draining %',
757     type => 'int'
758     }
759     ],
760     [
761     'resist_weaponmagic',
762     {
763     desc => 'This adds weaponmagic resistance to the item. The number is a percent-value in the range 0-100. Weaponmagic resistance generally should not exist on equipment at all. Spells/Monsters doing weaponmagic damage (e.g. comet spell) are not meant to be easily resisted.',
764     name => 'resist weaponmagic %',
765     type => 'int'
766     }
767     ],
768     [
769     'resist_ghosthit',
770     {
771     desc => 'This adds ghosthit resistance to the item. The number is a percent-value in the range 0-100. Treat this with CARE. Look at other maps and what they require to do for getting this-and-that artifact.',
772     name => 'resist ghosthit %',
773     type => 'int'
774     }
775     ],
776     [
777     'resist_poison',
778     {
779     desc => 'This adds poison resistance to the item. The number is a percent-value in the range 0-100. Treat this with CARE. Look at other maps and what they require to do for getting this-and-that artifact.',
780     name => 'resist poison %',
781     type => 'int'
782     }
783     ],
784     [
785     'resist_slow',
786     {
787     desc => 'This adds fear resistance to the item. The number is a percent-value in the range 0-100. Resistance to fear is pretty useless.',
788     name => 'resist slow %',
789     type => 'int'
790     }
791     ],
792     [
793     'resist_paralyze',
794     {
795     desc => 'This adds paralyze resistance to the item. The number is a percent-value in the range 0-100. Paralyze resistance is little effective unless the value is 100 (= perfect immunity).',
796     name => 'resist paralyze %',
797     type => 'int'
798     }
799     ],
800     [
801     'resist_fear',
802     {
803     desc => 'This adds fear resistance to the item. The number is a percent-value in the range 0-100. Resistance to fear is pretty useless.',
804     name => 'resist fear %',
805     type => 'int'
806     }
807     ],
808     [
809     'resist_deplete',
810     {
811     desc => 'This adds depletion resistance to the item. The number is a percent-value in the range 0-100. Depletion resistance is little effective unless the value is 100 (= perfect immunity).',
812     name => 'resist depletion %',
813     type => 'int'
814     }
815     ],
816     [
817     'resist_death',
818     {
819     desc => 'This adds death-attack resistance to the item. The number is a percent-value in the range 0-100. Death-attack resistance is little effective unless the value is 100 (= perfect immunity). Generally, resistance to death-attack is not supposed to be available to players!',
820     name => 'resist death-attack %',
821     type => 'int'
822     }
823     ],
824     [
825     'resist_chaos',
826     {
827     desc => 'This adds chaos resistance to the item. The number is a percent-value in the range 0-100. Treat this with CARE. Look at other maps and what they require to do for getting this-and-that artifact. Note that chaos is not a stand-alone attacktype. Chaos "contains" a combination of other attacktypes.',
828     name => 'resist chaos %',
829     type => 'int'
830     }
831     ],
832     [
833     'resist_blind',
834     {
835     desc => 'This adds blinding resistance to the item. The number is a percent-value in the range 0-100. Treat this with CARE. Look at other maps and what they require to do for getting this-and-that artifact.',
836     name => 'resist blinding %',
837     type => 'int'
838     }
839     ],
840     [
841     'resist_holyword',
842     {
843     desc => 'This adds holy power resistance to the item. The number is a percent-value in the range 0-100. Holy power is the attacktype that holyword-type spells use to hurt undead creatures. This kind of resistance is only reasonable for undead players (wraith or devourer cult). Generally, resistance to holy word should not be available for players.',
844     name => 'resist holy power %',
845     type => 'int'
846     }
847     ]
848     ]
849     ],
850     [
851     'stats',
852     [
853     [
854     'Str',
855     {
856     desc => 'The player\'s strentgh will rise/fall by the given value while wearing this piece of equipment.',
857     name => 'strength',
858     type => 'int'
859     }
860     ],
861     [
862     'Dex',
863     {
864     desc => 'The player\'s dexterity will rise/fall by the given value while wearing this piece of equipment.',
865     name => 'dexterity',
866     type => 'int'
867     }
868     ],
869     [
870     'Con',
871     {
872     desc => 'The player\'s constitution will rise/fall by the given value while wearing this piece of equipment.',
873     name => 'constitution',
874     type => 'int'
875     }
876     ],
877     [
878     'Int',
879     {
880     desc => 'The player\'s intelligence will rise/fall by the given value while wearing this piece of equipment.',
881     name => 'intelligence',
882     type => 'int'
883     }
884     ],
885     [
886     'Pow',
887     {
888     desc => 'The player\'s power will rise/fall by the given value while wearing this piece of equipment.',
889     name => 'power',
890     type => 'int'
891     }
892     ],
893     [
894     'Wis',
895     {
896     desc => 'The player\'s wisdom will rise/fall by the given value while wearing this piece of equipment.',
897     name => 'wisdom',
898     type => 'int'
899     }
900     ],
901     [
902     'Cha',
903     {
904     desc => 'The player\'s charisma will rise/fall by the given value while wearing this piece of equipment.',
905     name => 'charisma',
906     type => 'int'
907     }
908     ]
909     ]
910     ],
911     [
912     'misc',
913     [
914     [
915     'luck',
916     {
917     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.',
918     name => 'luck bonus',
919     type => 'int'
920     }
921     ],
922     [
923     'hp',
924     {
925     desc => 'Positive <health regen.> bonus speeds up the player\'s healing process. Negative values slow it down.',
926     name => 'health regen.',
927     type => 'int'
928     }
929     ],
930     [
931     'sp',
932     {
933     desc => 'Positive <mana regen.> bonus speeds up the player\'s mana regeneration. Negative values slow it down.',
934     name => 'mana regen.',
935     type => 'int'
936     }
937     ],
938     [
939     'grace',
940     {
941     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!!',
942     name => 'grace regen.',
943     type => 'int'
944     }
945     ],
946     [
947     'food',
948     {
949     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.',
950     name => 'food bonus',
951     type => 'int'
952     }
953     ],
954     [
955     'xrays',
956     {
957 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.',
958 root 1.7 name => 'xray vision',
959     type => 'bool'
960     }
961     ],
962     [
963     'stealth',
964     {
965     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)',
966     name => 'stealth',
967     type => 'bool'
968     }
969     ],
970     [
971     'reflect_spell',
972     {
973     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!',
974     name => 'reflect spells',
975     type => 'bool'
976     }
977     ],
978     [
979     'reflect_missile',
980     {
981     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.',
982     name => 'reflect missiles',
983     type => 'bool'
984     }
985     ],
986     [
987 root 1.14 'move_type',
988 root 1.7 {
989 root 1.14 desc => 'Determines which kinds of movement this object can use (e.g. for monsters) or grants (e.g. for amulets).',
990     name => 'movement type',
991     type => 'bitmask',
992     value => $BITMASK{movement_type}
993 root 1.7 }
994     ],
995     [
996     'path_attuned',
997     {
998     desc => 'Click on the <attuned paths> button to select spellpaths. The player will get attuned to the specified spellpaths while wearing this item.',
999     name => 'attuned paths',
1000     type => 'bitmask',
1001     value => $BITMASK{spellpath}
1002     }
1003     ],
1004     [
1005     'path_repelled',
1006     {
1007     desc => 'Click on the <repelled paths> button to select spellpaths. The player will get repelled to the specified spellpaths while wearing this item.',
1008     name => 'repelled paths',
1009     type => 'bitmask',
1010     value => $BITMASK{spellpath}
1011     }
1012     ],
1013     [
1014     'path_denied',
1015     {
1016     desc => 'Click on the <denied paths> button to select spellpaths. The specified spellpaths will be denied to the player while wearing this item.',
1017     name => 'denied paths',
1018     type => 'bitmask',
1019     value => $BITMASK{spellpath}
1020     }
1021     ]
1022     ]
1023     ]
1024     ],
1025     use => 'Feel free to create your own special artifacts. However, it is very important that you keep your artifact in balance with existing maps.'
1026     },
1027     Battleground => {
1028     attr => [
1029     [
1030     'no_pick',
1031     {
1032     type => 'fixed',
1033     value => 1
1034     }
1035     ],
1036     [
1037     'is_floor',
1038 root 1.4 {
1039 root 1.7 type => 'fixed',
1040     value => 1
1041 root 1.4 }
1042     ],
1043     [
1044 root 1.7 'hp',
1045 root 1.4 {
1046 root 1.7 desc => 'The exit destinations define the (x, y)-coordinates where players get teleported after they died on this battleground.',
1047     name => 'destination X',
1048     type => 'int'
1049 root 1.4 }
1050     ],
1051     [
1052 root 1.7 'sp',
1053 root 1.4 {
1054 root 1.7 desc => 'The exit destinations define the (x, y)-coordinates where players get teleported after they died on this battleground.',
1055     name => 'destination Y',
1056     type => 'int'
1057 root 1.4 }
1058     ]
1059     ],
1060 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.',
1061     ignore => [
1062     $IGNORE_LIST{non_pickable}
1063     ],
1064 root 1.5 name => 'Battleground',
1065 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.)'
1066     },
1067     Book => {
1068 root 1.7 attr => [
1069     [
1070     'level',
1071     {
1072     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.',
1073     name => 'literacy level',
1074     type => 'int'
1075     }
1076     ],
1077     [
1078     'startequip',
1079     {
1080     desc => 'A godgiven item vanishes as soon as the player drops it to the ground.',
1081     name => 'godgiven item',
1082     type => 'bool'
1083     }
1084     ],
1085     [
1086     'unique',
1087     {
1088     desc => 'Unique items exist only one time on a server. If the item is taken, lost or destroyed - it\'s gone for good.',
1089     name => 'unique item',
1090     type => 'bool'
1091     }
1092     ],
1093     [
1094     'msg',
1095     {
1096     desc => 'This is the text that appears "written" in the book.',
1097     end => 'endmsg',
1098     name => 'book content',
1099     type => 'text'
1100     }
1101 root 1.14 ],
1102     [
1103     'slaying',
1104     {
1105     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)',
1106     name => 'key string',
1107     type => 'string'
1108     }
1109 root 1.7 ]
1110     ],
1111 root 1.5 desc => 'Applying a book, the containing message is displayed to the player.',
1112     name => 'Book'
1113 root 1.1 },
1114 root 1.3 Boots => {
1115 root 1.7 attr => [
1116     [
1117     'exp',
1118     {
1119     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.',
1120     name => 'speed bonus',
1121     type => 'int'
1122     }
1123     ],
1124     [
1125     'magic',
1126     {
1127     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>.',
1128     name => 'magic bonus',
1129     type => 'int'
1130     }
1131     ]
1132     ],
1133 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.',
1134     import => [
1135     $TYPE{Amulet}
1136     ],
1137 root 1.5 name => 'Boots',
1138 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.'
1139     },
1140     Bracers => {
1141 root 1.7 attr => [
1142     [
1143     'magic',
1144     {
1145     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.',
1146     name => 'magic bonus',
1147     type => 'int'
1148     }
1149     ]
1150     ],
1151 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.',
1152     import => [
1153     $TYPE{Amulet}
1154     ],
1155 root 1.5 name => 'Bracers',
1156 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.'
1157     },
1158     'Brestplate Armour' => {
1159 root 1.7 attr => [
1160     [
1161     'last_heal',
1162     {
1163     desc => 'This poses a penalty to spell regeneration speed, for wearing the armour. The bigger the spellpoint penalty, the worse.',
1164     name => 'spellpoint penalty',
1165     type => 'int'
1166     }
1167     ],
1168     [
1169     'last_sp',
1170     {
1171     desc => 'Slowdown penalty reduces the player\'s walking speed when wearing the armour. Bigger values are worse - zero is best.',
1172     name => 'slowdown penalty',
1173     type => 'int'
1174     }
1175     ],
1176     [
1177     'magic',
1178     {
1179     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.',
1180     name => 'magic bonus',
1181     type => 'int'
1182     }
1183     ]
1184     ],
1185 root 1.3 desc => 'Wearing an armour, the object\'s stats will directly be inherited to the player. Usually enhancing his defense.',
1186 root 1.7 import => [
1187     $TYPE{Amulet}
1188     ],
1189     name => 'Brestplate Armour',
1190     use => 'Feel free to create your own special artifacts. However, it is very important that you keep your artifact in balance with existing maps.'
1191     },
1192     Button => {
1193     attr => [
1194     [
1195 root 1.14 'move_on',
1196 root 1.7 {
1197 root 1.14 desc => 'Which movement types automatically (as opposed to manually) activate this object.',
1198     name => 'movement type',
1199     type => 'bitmask',
1200     value => $BITMASK{movement_type}
1201 root 1.7 }
1202     ],
1203     [
1204 root 1.14 'move_off',
1205 root 1.7 {
1206 root 1.14 desc => 'Which movement types deactivate this object (e.g. button).',
1207     name => 'movement type',
1208     type => 'bitmask',
1209     value => $BITMASK{movement_type}
1210 root 1.7 }
1211     ],
1212     [
1213     'no_pick',
1214     {
1215     type => 'fixed',
1216     value => 1
1217     }
1218     ],
1219     [
1220     'weight',
1221     {
1222     desc => 'The button is pressed (triggered), as soon as <press weigh> gram are placed ontop of it.',
1223     name => 'press weight',
1224 root 1.9 type => 'int'
1225 root 1.7 }
1226     ],
1227     [
1228     'connected',
1229     {
1230     desc => 'Every time the button is pressed or released, all objects with the same <connection> value are activated.',
1231     name => 'connection',
1232     type => 'int'
1233     }
1234     ],
1235     [
1236     'msg',
1237     {
1238     desc => 'This text may describe the item. You can use this message to explain the button\'s purpose to the player.',
1239     end => 'endmsg',
1240     name => 'description',
1241     type => 'text'
1242     }
1243     ]
1244 root 1.3 ],
1245     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.',
1246     ignore => [
1247     $IGNORE_LIST{non_pickable}
1248 root 1.5 ],
1249     name => 'Button'
1250 root 1.3 },
1251 root 1.9 'Button Trigger' => {
1252     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.',
1253     ignore => [
1254     $IGNORE_LIST{non_pickable}
1255     ],
1256     import => [
1257     $TYPE{Button}
1258     ],
1259     name => 'Button Trigger'
1260     },
1261     'Class Changer' => {
1262     attr => [
1263     [
1264     'randomitems',
1265     {
1266     desc => 'This entry determines which initial items the character receives.',
1267     name => 'class items',
1268     type => 'treasurelist'
1269     }
1270     ]
1271     ],
1272     desc => 'Class changer are used while creating a character.',
1273     ignore => [
1274     $IGNORE_LIST{non_pickable}
1275     ],
1276     name => 'Class Changer',
1277     section => [
1278     [
1279     'stats',
1280     [
1281     [
1282     'Str',
1283     {
1284     desc => 'The player\'s strength will rise by the given value if he chooses this class. (Negative values make strength fall)',
1285     name => 'strength',
1286     type => 'int'
1287     }
1288     ],
1289     [
1290     'Dex',
1291     {
1292     desc => 'The player\'s dexterity will rise by the given value if he chooses this class. (Negative values make dexterity fall)',
1293     name => 'dexterity',
1294     type => 'int'
1295     }
1296     ],
1297     [
1298     'Con',
1299     {
1300     desc => 'The player\'s constitution will rise by the given value if he chooses this class. (Negative values make constitution fall)',
1301     name => 'constitution',
1302     type => 'int'
1303     }
1304     ],
1305     [
1306     'Int',
1307     {
1308     desc => 'The player\'s intelligence will rise by the given value if he chooses this class. (Negative values make intelligence fall)',
1309     name => 'intelligence',
1310     type => 'int'
1311     }
1312     ],
1313     [
1314     'Pow',
1315     {
1316     desc => 'The player\'s power will rise by the given value if he chooses this class. (Negative values make power fall)',
1317     name => 'power',
1318     type => 'int'
1319     }
1320     ],
1321     [
1322     'Wis',
1323     {
1324     desc => 'The player\'s wisdom will rise by the given value if he chooses this class. (Negative values make wisdom fall)',
1325     name => 'wisdom',
1326     type => 'int'
1327     }
1328     ],
1329     [
1330     'Cha',
1331     {
1332     desc => 'The player\'s charisma will rise by the given value if he chooses this class. (Negative values make charisma fall)',
1333     name => 'charisma',
1334     type => 'int'
1335     }
1336     ]
1337     ]
1338     ]
1339     ]
1340     },
1341 root 1.3 Cloak => {
1342 root 1.7 attr => [
1343     [
1344     'magic',
1345     {
1346     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>.',
1347     name => 'magic bonus',
1348     type => 'int'
1349     }
1350     ]
1351     ],
1352 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.',
1353     import => [
1354     $TYPE{Amulet}
1355     ],
1356 root 1.5 name => 'Cloak',
1357 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.'
1358     },
1359     Clock => {
1360 root 1.7 attr => [
1361     [
1362     'msg',
1363     {
1364     desc => 'This text may describe the item',
1365     end => 'endmsg',
1366     name => 'description',
1367     type => 'text'
1368     }
1369     ]
1370     ],
1371 root 1.5 desc => 'Applying a clock, the time is displayed to the player.',
1372     name => 'Clock'
1373 root 1.1 },
1374 root 1.3 Container => {
1375 root 1.7 attr => [
1376     [
1377     'race',
1378     {
1379     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.',
1380     name => 'container class',
1381     type => 'string'
1382     }
1383     ],
1384     [
1385     'slaying',
1386     {
1387     desc => 'If <key string> is set, only players with a special key of matching <key string> are able to open the container.',
1388     name => 'key string',
1389     type => 'string'
1390     }
1391     ],
1392     [
1393     'container',
1394     {
1395     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.',
1396     name => 'maximum weight',
1397     type => 'int'
1398     }
1399     ],
1400     [
1401     'Str',
1402     {
1403     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.',
1404     name => 'reduce weight %',
1405     type => 'int'
1406     }
1407     ],
1408     [
1409     'is_cauldron',
1410     {
1411     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.',
1412     name => 'alchemy cauldron',
1413     type => 'bool'
1414     }
1415     ],
1416     [
1417     'unique',
1418     {
1419     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.',
1420     name => 'unique item',
1421     type => 'bool'
1422     }
1423     ],
1424     [
1425     'startequip',
1426     {
1427     desc => 'A godgiven item vanishes as soon as the player drops it to the ground.',
1428     name => 'godgiven item',
1429     type => 'bool'
1430     }
1431     ],
1432     [
1433     'other_arch',
1434     {
1435     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.',
1436     name => 'animation arch',
1437     type => 'string'
1438     }
1439     ],
1440     [
1441     'msg',
1442     {
1443     desc => 'This text may contain a description of the container.',
1444     end => 'endmsg',
1445     name => 'description',
1446     type => 'text'
1447     }
1448     ]
1449     ],
1450 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.',
1451 root 1.5 name => 'Container',
1452 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>'
1453     },
1454     Converter => {
1455 root 1.7 attr => [
1456     [
1457     'no_pick',
1458     {
1459     type => 'fixed',
1460     value => 1
1461     }
1462     ],
1463     [
1464     'slaying',
1465     {
1466     desc => '<cost arch> is the name of the archetype the player has to put on the converter, as payment.',
1467     name => 'cost arch',
1468     type => 'string'
1469     }
1470     ],
1471     [
1472     'food',
1473     {
1474     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>.',
1475     name => 'cost number',
1476     type => 'int'
1477     }
1478     ],
1479     [
1480     'other_arch',
1481     {
1482 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.',
1483 root 1.7 name => 'receive arch',
1484     type => 'string'
1485     }
1486     ],
1487     [
1488     'sp',
1489     {
1490     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>.',
1491     name => 'receive number',
1492     type => 'int'
1493     }
1494     ],
1495     [
1496     'msg',
1497     {
1498     desc => 'This text may contain a description of the converter.',
1499     end => 'endmsg',
1500     name => 'description',
1501     type => 'text'
1502     }
1503     ]
1504     ],
1505 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.',
1506     ignore => [
1507     'value',
1508     'nrof',
1509     'name_pl',
1510     'no_pick',
1511     'unpaid',
1512     'title'
1513     ],
1514 root 1.5 name => 'Converter',
1515 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.'
1516     },
1517     Creator => {
1518 root 1.7 attr => [
1519     [
1520     'no_pick',
1521     {
1522     type => 'fixed',
1523     value => 1
1524     }
1525     ],
1526     [
1527     'other_arch',
1528     {
1529 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.',
1530 root 1.7 name => 'create arch',
1531     type => 'string'
1532     }
1533     ],
1534     [
1535     'connected',
1536     {
1537     desc => 'Whenever the connection value is activated, the creator gets triggered.',
1538     name => 'connection',
1539     type => 'int'
1540     }
1541     ],
1542     [
1543     'lifesave',
1544     {
1545 root 1.9 desc => 'If <infinit uses> is set, the creator will work infinitely, regardless of the value in <number of uses>.',
1546 root 1.7 name => 'infinit uses',
1547     type => 'bool'
1548     }
1549     ],
1550     [
1551     'hp',
1552     {
1553     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).',
1554     name => 'number of uses',
1555     type => 'int'
1556     }
1557     ],
1558     [
1559     'slaying',
1560     {
1561 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.',
1562 root 1.7 name => 'name of creation',
1563     type => 'string'
1564     }
1565     ],
1566     [
1567     'level',
1568     {
1569     desc => 'The created object will be of that level. If zero/unset, the standard level of the archetype is used.',
1570     name => 'level of creation',
1571     type => 'int'
1572     }
1573     ]
1574     ],
1575 root 1.3 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.',
1576     ignore => [
1577     $IGNORE_LIST{system_object}
1578     ],
1579 root 1.5 name => 'Creator',
1580 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.'
1581     },
1582     Detector => {
1583 root 1.7 attr => [
1584     [
1585     'no_pick',
1586     {
1587     type => 'fixed',
1588     value => 1
1589     }
1590     ],
1591     [
1592     'slaying',
1593     {
1594     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.',
1595     name => 'match name',
1596     type => 'string'
1597     }
1598     ],
1599     [
1600     'connected',
1601     {
1602     desc => 'When the detector is triggered, all objects with the same connection value get activated.',
1603     name => 'connection',
1604     type => 'int'
1605     }
1606     ],
1607     [
1608     'speed',
1609     {
1610     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.',
1611     name => 'detection speed',
1612     type => 'float'
1613     }
1614     ]
1615     ],
1616 root 1.3 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. Second, detectors check directly for object names. Third, detectors do not check the inventory of players/monsters.',
1617     ignore => [
1618     $IGNORE_LIST{system_object}
1619     ],
1620 root 1.5 name => 'Detector',
1621 root 1.3 use => 'There is one major speciality about detectors: You can detect spells blown over a detector! To detect a lighting bolt for example, set "slaying ligthing" and "speed 1.0". In combination with spellcasting walls, this can be very useful for map-mechanisms.'
1622     },
1623     Director => {
1624 root 1.7 attr => [
1625     [
1626     'sp',
1627     {
1628     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).',
1629     name => 'direction',
1630     type => 'list',
1631     value => $LIST{direction}
1632     }
1633     ],
1634     [
1635 root 1.14 'move_on',
1636 root 1.7 {
1637 root 1.14 desc => 'Which movement types automatically (as opposed to manually) activate this object.',
1638     name => 'movement type',
1639     type => 'bitmask',
1640     value => $BITMASK{movement_type}
1641 root 1.7 }
1642     ]
1643     ],
1644 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.',
1645     ignore => [
1646     $IGNORE_LIST{non_pickable}
1647     ],
1648 root 1.5 name => 'Director',
1649 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.'
1650     },
1651     Disease => {
1652 root 1.7 attr => [
1653     [
1654     'invisible',
1655     {
1656     type => 'fixed',
1657     value => 1
1658     }
1659     ],
1660     [
1661     'level',
1662     {
1663     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.',
1664     name => 'plaque level',
1665     type => 'int'
1666     }
1667     ],
1668     [
1669     'race',
1670     {
1671     desc => 'The disease will only infect creatures of the specified <race>. "<race> *" means every creature can be infected.',
1672     name => 'infect race',
1673     type => 'string'
1674     }
1675     ],
1676     [
1677     'ac',
1678     {
1679     desc => 'Every time the disease "moves" the severity of the symptoms are increased by <progressiveness>/100. (severity = 1 + (accumlated progression)/100)',
1680     name => 'progressiveness',
1681     type => 'int'
1682     }
1683     ],
1684     [
1685     'msg',
1686     {
1687     desc => 'This text is displayed to the player every time the symptoms strike.',
1688     end => 'endmsg',
1689     name => 'message',
1690     type => 'text'
1691     }
1692     ]
1693     ],
1694 root 1.3 desc => 'Diseases are an intersting form of spellcraft in Crossfire. 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.',
1695     ignore => [
1696     $IGNORE_LIST{system_object}
1697     ],
1698 root 1.5 name => 'Disease',
1699 root 1.4 section => [
1700     [
1701     'spreading',
1702 root 1.7 [
1703     [
1704     'wc',
1705     {
1706     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.',
1707     name => 'infectiosness',
1708     type => 'int'
1709     }
1710     ],
1711     [
1712     'last_grace',
1713     {
1714     desc => 'The <attenuation> value reduces the diseases\' <infectiosness> everytime it infects someone new. This limits how many generations a disease can propagate.',
1715     name => 'attenuation',
1716     type => 'int'
1717     }
1718     ],
1719     [
1720     'magic',
1721     {
1722     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.',
1723     name => 'infection range',
1724     type => 'int'
1725     }
1726     ],
1727     [
1728     'maxhp',
1729     {
1730     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).',
1731     name => 'persistence',
1732     type => 'int'
1733     }
1734     ],
1735     [
1736     'maxgrace',
1737     {
1738     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.',
1739     name => 'curing duration',
1740     type => 'int'
1741     }
1742     ],
1743     [
1744     'speed',
1745     {
1746     desc => 'The <speed> of the disease determines how fast the disease will "move", thus how fast the symptoms strike the host.',
1747     name => 'moving speed',
1748     type => 'float'
1749     }
1750     ]
1751     ]
1752     ],
1753     [
1754     'symptoms',
1755     [
1756     [
1757     'attacktype',
1758     {
1759     desc => 'The disease will attack the host with the given <attacktype>. Godpower attacktype is commonly used for "unresistable" diseases.',
1760     name => 'attacktype',
1761     type => 'bitmask',
1762     value => $BITMASK{attacktype}
1763     }
1764     ],
1765     [
1766     'dam',
1767     {
1768     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.',
1769     name => 'damage',
1770     type => 'int'
1771     }
1772     ],
1773     [
1774     'other_arch',
1775     {
1776     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.',
1777     name => 'create arch',
1778     type => 'string'
1779     }
1780     ],
1781     [
1782     'last_sp',
1783     {
1784     desc => 'If set, the disease imposes a <slowdown penalty> while being infected. The player\'s speed is reduced by <slowdown penalty> % of normal value.',
1785     name => 'slowdown penalty',
1786     type => 'int'
1787     }
1788     ],
1789     [
1790     'exp',
1791     {
1792     desc => 'When the player manages to cure this disease (with a curing spell), he is awarded with <exp. for curing> experience.',
1793     name => 'exp. for curing',
1794     type => 'int'
1795     }
1796     ],
1797     [
1798     'maxsp',
1799     {
1800     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.',
1801     name => 'mana depletion',
1802     type => 'int'
1803     }
1804     ],
1805     [
1806     'last_eat',
1807     {
1808     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.',
1809     name => 'food depletion',
1810     type => 'int'
1811     }
1812     ],
1813     [
1814     'hp',
1815     {
1816     desc => 'This value increases the player\'s healing rate. Negative values decrease it.',
1817     name => 'health regen.',
1818     type => 'int'
1819     }
1820     ],
1821     [
1822     'sp',
1823     {
1824     desc => 'This value increases the player\'s rate of mana regeneration. Negative values decrease it.',
1825     name => 'mana regen.',
1826     type => 'int'
1827     }
1828     ]
1829     ]
1830     ],
1831     [
1832     'disability',
1833     [
1834     [
1835     'Str',
1836     {
1837     desc => 'The player\'s strength will rise by the given value while being infected. (Negative values make strength fall)',
1838     name => 'strength',
1839     type => 'int'
1840     }
1841     ],
1842     [
1843     'Dex',
1844     {
1845     desc => 'The player\'s dexterity will rise by the given value while being infected. (Negative values make dexterity fall)',
1846     name => 'dexterity',
1847     type => 'int'
1848     }
1849     ],
1850     [
1851     'Con',
1852     {
1853     desc => 'The player\'s constitution will rise by the given value while being infected. (Negative values make constitution fall)',
1854     name => 'constitution',
1855     type => 'int'
1856     }
1857     ],
1858     [
1859     'Int',
1860     {
1861     desc => 'The player\'s intelligence will rise by the given value while being infected. (Negative values make intelligence fall)',
1862     name => 'intelligence',
1863     type => 'int'
1864     }
1865     ],
1866     [
1867     'Pow',
1868     {
1869     desc => 'The player\'s power will rise by the given value while being infected. (Negative values make power fall)',
1870     name => 'power',
1871     type => 'int'
1872     }
1873     ],
1874     [
1875     'Wis',
1876     {
1877     desc => 'The player\'s wisdom will rise by the given value while being infected. (Negative values make wisdom fall)',
1878     name => 'wisdom',
1879     type => 'int'
1880     }
1881     ],
1882     [
1883     'Cha',
1884     {
1885     desc => 'The player\'s charisma will rise by the given value while being infected. (Negative values make charisma fall)',
1886     name => 'charisma',
1887     type => 'int'
1888     }
1889     ]
1890     ]
1891     ]
1892     ],
1893     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.'
1894     },
1895 root 1.9 Door => {
1896     attr => [
1897     [
1898     'no_pick',
1899     {
1900     type => 'fixed',
1901     value => 1
1902     }
1903     ],
1904     [
1905     'alive',
1906     {
1907     type => 'fixed',
1908     value => 1
1909     }
1910     ],
1911     [
1912 root 1.14 'move_block',
1913 root 1.9 {
1914 root 1.14 desc => 'Objects using these movement types cannot move over this space.',
1915     name => 'blocked movement',
1916     type => 'bitmask',
1917     value => $BITMASK{movement_type}
1918     }
1919     ],
1920     [
1921     'move_allow',
1922     {
1923     desc => 'Objects using these movement types are allowed to move over this space. Takes precedence over \'blocked movements\'.',
1924     name => 'allowed movement',
1925     type => 'bitmask',
1926     value => $BITMASK{movement_type}
1927     }
1928     ],
1929     [
1930     'move_slow',
1931     {
1932     desc => 'The types of movement that should by slowed down by the \'slow movement penalty\'.',
1933     name => 'slowed movement',
1934     type => 'bitmask',
1935     value => $BITMASK{movement_type}
1936     }
1937     ],
1938     [
1939     'move_slow_penalty',
1940     {
1941     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)',
1942     name => 'slow movement penalty',
1943     type => 'int'
1944 root 1.9 }
1945     ],
1946     [
1947     'hp',
1948     {
1949     desc => 'The more <hitpoints> the door has, the longer it takes to be broken.',
1950     name => 'hitpoints',
1951     type => 'int'
1952     }
1953     ],
1954     [
1955     'ac',
1956     {
1957     desc => 'Doors of high <armour class> are less likely to get hit. <armour class> can be considered the "counterpiece" to <weapon class>.',
1958     name => 'armour class',
1959     type => 'int'
1960     }
1961     ],
1962     [
1963     'other_arch',
1964     {
1965     desc => 'This string defines the object that will be created when the door was defeated.',
1966     name => 'drop arch',
1967     type => 'string'
1968     }
1969     ],
1970     [
1971     'randomitems',
1972     {
1973     desc => 'This entry determines what kind of traps will appear in the door.',
1974     name => 'treasurelist',
1975     type => 'treasurelist'
1976     }
1977     ]
1978     ],
1979     desc => 'A door can be opened with a 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.',
1980     ignore => [
1981     $IGNORE_LIST{non_pickable}
1982     ],
1983     name => 'Door'
1984     },
1985 root 1.7 Duplicator => {
1986     attr => [
1987     [
1988     'other_arch',
1989 root 1.4 {
1990 root 1.7 desc => 'Only objects of matching archtype, lying ontop of the dublicator will be dublicated, multiplied or removed. All other objects will be ignored.',
1991     name => 'target arch',
1992     type => 'string'
1993 root 1.4 }
1994     ],
1995     [
1996 root 1.7 'level',
1997 root 1.4 {
1998 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.',
1999     name => 'multiply factor',
2000     type => 'int'
2001 root 1.4 }
2002     ],
2003     [
2004 root 1.7 'connected',
2005 root 1.4 {
2006 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!',
2007     name => 'connection',
2008     type => 'int'
2009 root 1.4 }
2010     ]
2011     ],
2012 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.',
2013     ignore => [
2014     $IGNORE_LIST{system_object}
2015     ],
2016 root 1.5 name => 'Duplicator',
2017 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%.'
2018     },
2019 root 1.10 'Event Connector' => {
2020     attr => [
2021     [
2022     'subtype',
2023     {
2024     desc => 'The type of event that triggers a notify to the plug-in.',
2025     name => 'event type',
2026     type => 'list',
2027     value => $LIST{event_type}
2028     }
2029     ],
2030     [
2031     'title',
2032     {
2033     desc => 'The name of the plug-in that should be notified of the event, e.g. "cfpython" for python and "perl" for the Crossfire-Perl plug-in.',
2034     name => 'plug-in',
2035 root 1.11 type => 'string'
2036 root 1.10 }
2037     ],
2038     [
2039     'slaying',
2040     {
2041     desc => 'The name of the extension to invoke (for python, this is the path to a script, for perl this is the name of a extension package without the ".ext" extension.',
2042     name => 'extension',
2043 root 1.11 type => 'string'
2044 root 1.10 }
2045     ],
2046     [
2047     'name',
2048     {
2049     desc => 'A string that is passed unaltered to the extension above. Often used to pass options to the extension that alter its behaviour.',
2050     name => 'options',
2051 root 1.11 type => 'string'
2052 root 1.10 }
2053     ]
2054     ],
2055     desc => 'Event connectors link specific events that happen to objects to a crossfire plug-in.',
2056     name => 'Event Connector'
2057     },
2058 root 1.3 Exit => {
2059 root 1.7 attr => [
2060     [
2061     'slaying',
2062     {
2063     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".',
2064     name => 'exit path',
2065     type => 'string'
2066     }
2067     ],
2068     [
2069     'hp',
2070     {
2071     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.',
2072     name => 'destination X',
2073     type => 'int'
2074     }
2075     ],
2076     [
2077     'sp',
2078     {
2079     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.',
2080     name => 'destination Y',
2081     type => 'int'
2082     }
2083     ],
2084     [
2085 root 1.14 'move_on',
2086 root 1.7 {
2087 root 1.14 desc => 'Which movement types automatically (as opposed to manually) activate this object.',
2088     name => 'movement type',
2089     type => 'bitmask',
2090     value => $BITMASK{movement_type}
2091 root 1.7 }
2092     ],
2093     [
2094     'msg',
2095     {
2096     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. =)',
2097     end => 'endmsg',
2098     name => 'exit message',
2099     type => 'text'
2100     }
2101     ],
2102     [
2103     'unique',
2104     {
2105     desc => 'This flag defines the destined map as "personal unique map". If set, there will be a seperate version of that map for every player out there. This feature is used for the permanent apartments (in Scorn/Nuernberg/Caterham...). It should not be used for anything else than apartments, since Crossfire is a *multi*player game. In such a permanent apartment don\'t forget to set the unique-flag for all floor tiles too (see floors). An exit pointing outside of a personal unique map must have the "unique destination"-flag unset.',
2106     name => 'unique destination',
2107     type => 'bool'
2108     }
2109     ]
2110     ],
2111 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.',
2112     ignore => [
2113     $IGNORE_LIST{non_pickable}
2114     ],
2115 root 1.5 name => 'Exit',
2116 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.'
2117     },
2118     Flesh => {
2119 root 1.7 attr => [
2120     [
2121     'food',
2122     {
2123     desc => 'The player\'s stomache will get filled with this amount of foodpoints. The player\'s health will increase by <foodpoints>/50 hp.',
2124     name => 'foodpoints',
2125     type => 'int'
2126     }
2127     ],
2128     [
2129     'level',
2130     {
2131     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.',
2132     name => 'flesh level',
2133     type => 'int'
2134     }
2135     ],
2136     [
2137     'startequip',
2138     {
2139     desc => 'A godgiven item vanishes as soon as the player drops it to the ground.',
2140     name => 'godgiven item',
2141     type => 'bool'
2142     }
2143     ],
2144     [
2145     'msg',
2146     {
2147     desc => 'This text may describe the item.',
2148     end => 'endmsg',
2149     name => 'description',
2150     type => 'text'
2151     }
2152     ]
2153     ],
2154 root 1.3 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 cathegories. 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.',
2155 root 1.5 name => 'Flesh',
2156 root 1.4 section => [
2157     [
2158     'resistance',
2159 root 1.7 [
2160     [
2161     'resist_physical',
2162     {
2163     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.',
2164     name => 'resist physical %',
2165     type => 'int'
2166     }
2167     ],
2168     [
2169     'resist_magic',
2170     {
2171     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.',
2172     name => 'resist magic %',
2173     type => 'int'
2174     }
2175     ],
2176     [
2177     'resist_fire',
2178     {
2179     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.',
2180     name => 'resist fire %',
2181     type => 'int'
2182     }
2183     ],
2184     [
2185     'resist_electricity',
2186     {
2187     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.',
2188     name => 'resist electricity %',
2189     type => 'int'
2190     }
2191     ],
2192     [
2193     'resist_cold',
2194     {
2195     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.',
2196     name => 'resist cold %',
2197     type => 'int'
2198     }
2199     ],
2200     [
2201     'resist_confusion',
2202     {
2203     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.',
2204     name => 'resist confusion %',
2205     type => 'int'
2206     }
2207     ],
2208     [
2209     'resist_acid',
2210     {
2211     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.',
2212     name => 'resist acid %',
2213     type => 'int'
2214     }
2215     ],
2216     [
2217     'resist_drain',
2218     {
2219     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.',
2220     name => 'resist draining %',
2221     type => 'int'
2222     }
2223     ],
2224     [
2225     'resist_weaponmagic',
2226     {
2227     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.',
2228     name => 'resist weaponmagic %',
2229     type => 'int'
2230     }
2231     ],
2232     [
2233     'resist_ghosthit',
2234     {
2235     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.',
2236     name => 'resist ghosthit %',
2237     type => 'int'
2238     }
2239     ],
2240     [
2241     'resist_poison',
2242     {
2243     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.',
2244     name => 'resist poison %',
2245     type => 'int'
2246     }
2247     ],
2248     [
2249     'resist_slow',
2250     {
2251     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.',
2252     name => 'resist slow %',
2253     type => 'int'
2254     }
2255     ],
2256     [
2257     'resist_paralyze',
2258     {
2259     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.',
2260     name => 'resist paralyze %',
2261     type => 'int'
2262     }
2263     ],
2264     [
2265     'resist_fear',
2266     {
2267     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.',
2268     name => 'resist fear %',
2269     type => 'int'
2270     }
2271     ],
2272     [
2273     'resist_deplete',
2274     {
2275     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.',
2276     name => 'resist depletion %',
2277     type => 'int'
2278     }
2279     ],
2280     [
2281     'resist_death',
2282     {
2283     desc => 'RResistances 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.',
2284     name => 'resist death-attack %',
2285     type => 'int'
2286     }
2287     ],
2288     [
2289     'resist_chaos',
2290     {
2291     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.',
2292     name => 'resist chaos %',
2293     type => 'int'
2294     }
2295     ],
2296     [
2297     'resist_blind',
2298     {
2299     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.',
2300     name => 'resist blinding %',
2301     type => 'int'
2302     }
2303     ]
2304     ]
2305 root 1.4 ]
2306     ],
2307 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.'
2308     },
2309     Floor => {
2310 root 1.7 attr => [
2311     [
2312     'is_floor',
2313     {
2314     type => 'fixed',
2315     value => 1
2316     }
2317     ],
2318     [
2319     'no_pick',
2320     {
2321     type => 'fixed',
2322     value => 1
2323     }
2324     ],
2325     [
2326     'no_magic',
2327     {
2328     desc => 'If enabled, it is impossible for players to use (wizard-) spells on that spot.',
2329     name => 'no spells',
2330     type => 'bool'
2331     }
2332     ],
2333     [
2334     'damned',
2335     {
2336     desc => 'If enabled, it is impossible for players to use prayers on that spot. It also prevents players from saving.',
2337     name => 'no prayers',
2338     type => 'bool'
2339     }
2340     ],
2341     [
2342     'unique',
2343     {
2344     desc => 'Unique floor means that any items dropped on that spot will be saved byond map reset. For permanent apartments, all floor tiles must be set <unique map>.',
2345     name => 'unique map',
2346     type => 'bool'
2347     }
2348     ],
2349     [
2350     'msg',
2351     {
2352     desc => 'This text may describe the object.',
2353     end => 'endmsg',
2354     name => 'description',
2355     type => 'text'
2356     }
2357     ]
2358     ],
2359 root 1.3 desc => 'Floor is a very basic thing whithout too much functionality. It\'s a floor - you stand on it.',
2360     ignore => [
2361     $IGNORE_LIST{non_pickable}
2362     ],
2363 root 1.5 name => 'Floor',
2364 root 1.3 required => {
2365     alive => 0,
2366     is_floor => 1
2367 root 1.4 },
2368     section => [
2369     [
2370     'terrain',
2371 root 1.7 [
2372     [
2373 root 1.14 'move_block',
2374     {
2375     desc => 'Objects using these movement types cannot move over this space.',
2376     name => 'blocked movement',
2377     type => 'bitmask',
2378     value => $BITMASK{movement_type}
2379     }
2380     ],
2381     [
2382     'move_allow',
2383     {
2384     desc => 'Objects using these movement types are allowed to move over this space. Takes precedence over \'blocked movements\'.',
2385     name => 'allowed movement',
2386     type => 'bitmask',
2387     value => $BITMASK{movement_type}
2388     }
2389     ],
2390     [
2391     'move_slow',
2392     {
2393     desc => 'The types of movement that should by slowed down by the \'slow movement penalty\'.',
2394     name => 'slowed movement',
2395     type => 'bitmask',
2396     value => $BITMASK{movement_type}
2397     }
2398     ],
2399     [
2400     'move_slow_penalty',
2401 root 1.7 {
2402 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)',
2403     name => 'slow movement penalty',
2404 root 1.7 type => 'int'
2405     }
2406     ],
2407     [
2408     'is_wooded',
2409     {
2410     desc => 'This flag indicates this spot contains wood or high grass. Players with activated woodsman skill can move faster here.',
2411     name => 'wooded terrain',
2412     type => 'bool'
2413     }
2414     ],
2415     [
2416     'is_hilly',
2417     {
2418     desc => 'This flag indicates this spot contains hills or large rocks. Players with activated mountaineer skill can move faster here.',
2419     name => 'hilly terrain',
2420     type => 'bool'
2421     }
2422     ]
2423     ]
2424 root 1.4 ]
2425     ]
2426 root 1.3 },
2427     'Floor (Encounter)' => {
2428 root 1.7 attr => [
2429     [
2430     'is_floor',
2431     {
2432     type => 'fixed',
2433     value => 1
2434     }
2435     ],
2436     [
2437     'no_pick',
2438     {
2439     type => 'fixed',
2440     value => 1
2441     }
2442     ],
2443     [
2444     'no_magic',
2445     {
2446     desc => 'If enabled, it is impossible for players to use (wizard-) spells on that spot.',
2447     name => 'no spells',
2448     type => 'bool'
2449     }
2450     ],
2451     [
2452     'damned',
2453     {
2454     desc => 'If enabled, it is impossible for players to use prayers on that spot. It also prevents players from saving.',
2455     name => 'no prayers',
2456     type => 'bool'
2457     }
2458     ],
2459     [
2460     'unique',
2461     {
2462     desc => 'Unique floor means that any items dropped on that spot will be saved byond map reset. For permanent apartments, all floor tiles must be set <unique map>.',
2463     name => 'unique map',
2464     type => 'bool'
2465     }
2466     ],
2467     [
2468     'msg',
2469     {
2470     desc => 'This text may describe the object.',
2471     end => 'endmsg',
2472     name => 'description',
2473     type => 'text'
2474     }
2475     ]
2476     ],
2477 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.',
2478     ignore => [
2479     $IGNORE_LIST{non_pickable}
2480 root 1.4 ],
2481 root 1.5 name => 'Floor (Encounter)',
2482 root 1.4 section => [
2483     [
2484     'terrain',
2485 root 1.7 [
2486     [
2487 root 1.14 'move_block',
2488     {
2489     desc => 'Objects using these movement types cannot move over this space.',
2490     name => 'blocked movement',
2491     type => 'bitmask',
2492     value => $BITMASK{movement_type}
2493     }
2494     ],
2495     [
2496     'move_allow',
2497 root 1.7 {
2498 root 1.14 desc => 'Objects using these movement types are allowed to move over this space. Takes precedence over \'blocked movements\'.',
2499     name => 'allowed movement',
2500     type => 'bitmask',
2501     value => $BITMASK{movement_type}
2502     }
2503     ],
2504     [
2505     'move_slow',
2506     {
2507     desc => 'The types of movement that should by slowed down by the \'slow movement penalty\'.',
2508     name => 'slowed movement',
2509     type => 'bitmask',
2510     value => $BITMASK{movement_type}
2511     }
2512     ],
2513     [
2514     'move_slow_penalty',
2515     {
2516     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)',
2517     name => 'slow movement penalty',
2518 root 1.7 type => 'int'
2519     }
2520     ],
2521     [
2522     'is_wooded',
2523     {
2524     desc => 'This flag indicates this spot contains wood or high grass. Players with activated woodsman skill can move faster here.',
2525     name => 'wooded terrain',
2526     type => 'bool'
2527     }
2528     ],
2529     [
2530     'is_hilly',
2531     {
2532     desc => 'This flag indicates this spot contains hills or large rocks. Players with activated mountaineer skill can move faster here.',
2533     name => 'hilly terrain',
2534     type => 'bool'
2535     }
2536     ]
2537     ]
2538 root 1.4 ]
2539 root 1.3 ]
2540     },
2541     Food => {
2542 root 1.7 attr => [
2543     [
2544     'food',
2545     {
2546     desc => 'The player\'s stomache will get filled with this amount of foodpoints. The player\'s health will increase by <foodpoints>/50 hp.',
2547     name => 'foodpoints',
2548     type => 'int'
2549     }
2550     ],
2551     [
2552     'startequip',
2553     {
2554     desc => 'A godgiven item vanishes as soon as the player drops it to the ground.',
2555     name => 'godgiven item',
2556     type => 'bool'
2557     }
2558     ]
2559     ],
2560 root 1.5 desc => 'By eating/drinking food-objects, the player can fill his stomache and gain a little health.',
2561     name => 'Food'
2562 root 1.1 },
2563 root 1.3 Gate => {
2564 root 1.7 attr => [
2565     [
2566     'no_pick',
2567     {
2568     type => 'fixed',
2569     value => 1
2570     }
2571     ],
2572     [
2573     'connected',
2574     {
2575     desc => 'Whenever the inventory checker is triggered, all objects with identical <connection> value get activated. This only makes sense together with <blocking passage> disabled.',
2576     name => 'connection',
2577     type => 'int'
2578     }
2579     ],
2580     [
2581     'wc',
2582     {
2583     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.',
2584     name => 'position state',
2585     type => 'int'
2586     }
2587     ],
2588     [
2589 root 1.14 'move_block',
2590     {
2591     desc => 'Objects using these movement types cannot move over this space.',
2592     name => 'blocked movement',
2593     type => 'bitmask',
2594     value => $BITMASK{movement_type}
2595     }
2596     ],
2597     [
2598     'move_allow',
2599     {
2600     desc => 'Objects using these movement types are allowed to move over this space. Takes precedence over \'blocked movements\'.',
2601     name => 'allowed movement',
2602     type => 'bitmask',
2603     value => $BITMASK{movement_type}
2604     }
2605     ],
2606     [
2607     'move_slow',
2608 root 1.7 {
2609 root 1.14 desc => 'The types of movement that should by slowed down by the \'slow movement penalty\'.',
2610     name => 'slowed movement',
2611     type => 'bitmask',
2612     value => $BITMASK{movement_type}
2613     }
2614     ],
2615     [
2616     'move_slow_penalty',
2617     {
2618     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)',
2619     name => 'slow movement penalty',
2620     type => 'int'
2621 root 1.7 }
2622     ],
2623     [
2624     'no_magic',
2625     {
2626     desc => 'Restricting the use of spells to pass this gate. This has an effect only if <block view> is disabled.',
2627     name => 'restrict spells',
2628     type => 'bool'
2629     }
2630     ],
2631     [
2632     'damned',
2633     {
2634     desc => 'Restricting the use of prayers to pass this door. This has an effect only if <block view> is disabled.',
2635     name => 'restrict prayers',
2636     type => 'bool'
2637     }
2638     ]
2639     ],
2640 root 1.3 desc => 'Gates play an important role in Crossfire. 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.',
2641     ignore => [
2642     $IGNORE_LIST{non_pickable}
2643     ],
2644 root 1.5 name => 'Gate',
2645 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".'
2646     },
2647     Girdle => {
2648 root 1.7 attr => [
2649     [
2650     'magic',
2651     {
2652     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.',
2653     name => 'magic bonus',
2654     type => 'int'
2655     }
2656     ]
2657     ],
2658     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.',
2659     import => [
2660     $TYPE{Amulet}
2661     ],
2662     name => 'Girdle',
2663     use => 'Feel free to create your own special artifacts. However, it is very important that you keep your artifact in balance with existing maps.'
2664     },
2665     Gloves => {
2666     attr => [
2667     [
2668     'magic',
2669     {
2670     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.',
2671     name => 'magic bonus',
2672     type => 'int'
2673     }
2674     ]
2675     ],
2676     desc => 'Wearing gloves, the object\'s stats will directly be inherited to the player. Gloves can add defense or damage bonuses.',
2677     import => [
2678     $TYPE{Amulet}
2679     ],
2680     name => 'Gloves',
2681     use => 'Feel free to create your own special artifacts. However, it is very important that you keep your artifact in balance with existing maps.'
2682     },
2683     Handle => {
2684     attr => [
2685     [
2686     'no_pick',
2687     {
2688     type => 'fixed',
2689     value => 1
2690     }
2691     ],
2692     [
2693     'connected',
2694     {
2695     desc => 'Every time the handle is applied, all objects with the same <connection> value are activated.',
2696     name => 'connection',
2697     type => 'int'
2698     }
2699     ],
2700     [
2701     'msg',
2702     {
2703     desc => 'This text may describe the item. You can use this message to explain the handle\'s purpose to the player.',
2704     end => 'endmsg',
2705     name => 'description',
2706     type => 'text'
2707     }
2708     ]
2709     ],
2710     desc => 'A handle can be applied by players and (certain) monsters. Every time it is applied, the &lt;connection&gt; value is triggered.',
2711     ignore => [
2712     $IGNORE_LIST{non_pickable}
2713     ],
2714     name => 'Handle',
2715     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.'
2716     },
2717     'Handle Trigger' => {
2718     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.',
2719     ignore => [
2720     $IGNORE_LIST{non_pickable}
2721     ],
2722     import => [
2723     $TYPE{Handle}
2724     ],
2725     name => 'Handle Trigger',
2726     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.'
2727     },
2728     'Hazard Floor' => {
2729     attr => [
2730     [
2731     'is_floor',
2732     {
2733     type => 'fixed',
2734     value => 1
2735     }
2736     ],
2737     [
2738     'lifesave',
2739     {
2740     type => 'fixed',
2741     value => 1
2742     }
2743     ],
2744     [
2745 root 1.14 'move_on',
2746 root 1.7 {
2747 root 1.14 desc => 'Which movement types automatically (as opposed to manually) activate this object.',
2748     name => 'movement type',
2749     type => 'bitmask',
2750     value => $BITMASK{movement_type}
2751 root 1.7 }
2752     ],
2753     [
2754     'no_pick',
2755     {
2756     type => 'fixed',
2757     value => 1
2758     }
2759     ],
2760     [
2761     'attacktype',
2762     {
2763     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.',
2764     name => 'attacktype',
2765     type => 'bitmask',
2766     value => $BITMASK{attacktype}
2767     }
2768     ],
2769     [
2770     'dam',
2771     {
2772     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.',
2773     name => 'base damage',
2774     type => 'int'
2775     }
2776     ],
2777     [
2778     'wc',
2779     {
2780     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.',
2781     name => 'weaponclass',
2782     type => 'int'
2783     }
2784     ],
2785     [
2786     'level',
2787     {
2788     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.',
2789     name => 'attack level',
2790     type => 'int'
2791     }
2792     ],
2793     [
2794     'no_magic',
2795     {
2796     desc => 'If enabled, it is impossible for players to use (wizard-) spells on that spot.',
2797     name => 'no spells',
2798     type => 'bool'
2799     }
2800     ],
2801     [
2802     'damned',
2803     {
2804     desc => 'If enabled, it is impossible for players to use prayers on that spot. It also prevents players from saving.',
2805     name => 'no prayers',
2806     type => 'bool'
2807     }
2808     ],
2809     [
2810     'unique',
2811     {
2812     desc => 'Unique floor means that any items dropped on that spot will be saved byond map reset. For permanent apartments, all floor tiles must be set <unique map>.',
2813     name => 'unique map',
2814     type => 'bool'
2815     }
2816     ]
2817 root 1.3 ],
2818     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.',
2819     ignore => [
2820     $IGNORE_LIST{non_pickable}
2821     ],
2822 root 1.5 name => 'Hazard Floor',
2823 root 1.3 required => {
2824     is_floor => 1
2825     },
2826 root 1.4 section => [
2827     [
2828     'terrain',
2829 root 1.7 [
2830     [
2831 root 1.14 'move_block',
2832     {
2833     desc => 'Objects using these movement types cannot move over this space.',
2834     name => 'blocked movement',
2835     type => 'bitmask',
2836     value => $BITMASK{movement_type}
2837     }
2838     ],
2839     [
2840     'move_allow',
2841 root 1.7 {
2842 root 1.14 desc => 'Objects using these movement types are allowed to move over this space. Takes precedence over \'blocked movements\'.',
2843     name => 'allowed movement',
2844     type => 'bitmask',
2845     value => $BITMASK{movement_type}
2846     }
2847     ],
2848     [
2849     'move_slow',
2850     {
2851     desc => 'The types of movement that should by slowed down by the \'slow movement penalty\'.',
2852     name => 'slowed movement',
2853     type => 'bitmask',
2854     value => $BITMASK{movement_type}
2855     }
2856     ],
2857     [
2858     'move_slow_penalty',
2859     {
2860     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)',
2861     name => 'slow movement penalty',
2862 root 1.7 type => 'int'
2863     }
2864     ],
2865     [
2866     'is_wooded',
2867     {
2868     desc => 'This flag indicates this spot contains wood or high grass. Players with activated woodsman skill can move faster here.',
2869     name => 'wooded terrain',
2870     type => 'bool'
2871     }
2872     ],
2873     [
2874     'is_hilly',
2875     {
2876     desc => 'This flag indicates this spot contains hills or large rocks. Players with activated mountaineer skill can move faster here.',
2877     name => 'hilly terrain',
2878     type => 'bool'
2879     }
2880     ]
2881     ]
2882 root 1.4 ]
2883     ],
2884 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.'
2885     },
2886     Helmet => {
2887 root 1.7 attr => [
2888     [
2889     'magic',
2890     {
2891     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>.',
2892     name => 'magic bonus',
2893     type => 'int'
2894     }
2895     ]
2896     ],
2897 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.',
2898     import => [
2899     $TYPE{Amulet}
2900     ],
2901 root 1.5 name => 'Helmet',
2902 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.'
2903     },
2904     'Holy Altar' => {
2905 root 1.7 attr => [
2906     [
2907     'no_pick',
2908     {
2909     type => 'fixed',
2910     value => 1
2911     }
2912     ],
2913     [
2914     'other_arch',
2915     {
2916     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.',
2917     name => 'god name',
2918     type => 'string'
2919     }
2920     ],
2921     [
2922     'level',
2923     {
2924     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> 100. Some characters might need those altars, they would be very unhappy to see them re-consecrated to another cult.',
2925     name => 'reconsecrate level',
2926     type => 'int'
2927     }
2928     ]
2929     ],
2930 root 1.3 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.',
2931     ignore => [
2932     $IGNORE_LIST{non_pickable}
2933 root 1.5 ],
2934     name => 'Holy Altar'
2935 root 1.3 },
2936     Horn => {
2937 root 1.7 attr => [
2938     [
2939     'sp',
2940     {
2941     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!',
2942     name => 'spell',
2943     type => 'spell'
2944     }
2945     ],
2946     [
2947     'level',
2948     {
2949     desc => 'The casting level of the <spell> determines it\'s power. For attack spells, level should not be set too high.',
2950     name => 'casting level',
2951     type => 'int'
2952     }
2953     ],
2954     [
2955     'hp',
2956     {
2957     desc => 'This value represents the initial amount of spellpoints in the horn. Naturally, this is quite unimportant.',
2958     name => 'initial spellpoints',
2959     type => 'int'
2960     }
2961     ],
2962     [
2963     'maxhp',
2964     {
2965     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.',
2966     name => 'max. spellpoints',
2967     type => 'int'
2968     }
2969     ],
2970     [
2971     'startequip',
2972     {
2973     desc => 'A godgiven item vanishes as soon as the player drops it to the ground.',
2974     name => 'godgiven item',
2975     type => 'bool'
2976     }
2977     ],
2978     [
2979     'msg',
2980     {
2981     desc => 'This text may contain a description of the horn.',
2982     end => 'endmsg',
2983     name => 'description',
2984     type => 'text'
2985     }
2986     ]
2987     ],
2988 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.',
2989     ignore => [
2990     'title'
2991     ],
2992 root 1.5 name => 'Horn',
2993 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.'
2994     },
2995     Inorganic => {
2996 root 1.7 attr => [
2997     [
2998     'is_dust',
2999     {
3000     name => 'is dust',
3001     type => 'bool'
3002     }
3003     ]
3004     ],
3005 root 1.4 desc => 'Inorganic materials are generally used as ingredients for alchemical receipes. By themselves, they have no special functionalities.',
3006 root 1.5 name => 'Inorganic',
3007 root 1.4 section => [
3008     [
3009     'resistance',
3010 root 1.7 [
3011     [
3012     'resist_physical',
3013     {
3014     name => 'resist physical %',
3015     type => 'int'
3016     }
3017     ],
3018     [
3019     'resist_magic',
3020     {
3021     name => 'resist magic %',
3022     type => 'int'
3023     }
3024     ],
3025     [
3026     'resist_fire',
3027     {
3028     name => 'resist fire %',
3029     type => 'int'
3030     }
3031     ],
3032     [
3033     'resist_electricity',
3034     {
3035     name => 'resist electricity %',
3036     type => 'int'
3037     }
3038     ],
3039     [
3040     'resist_cold',
3041     {
3042     name => 'resist cold %',
3043     type => 'int'
3044     }
3045     ],
3046     [
3047     'resist_acid',
3048     {
3049     name => 'resist acid %',
3050     type => 'int'
3051     }
3052     ],
3053     [
3054     'resist_weaponmagic',
3055     {
3056     name => 'resist weaponmagic %',
3057     type => 'int'
3058     }
3059     ],
3060     [
3061     'resist_ghosthit',
3062     {
3063     name => 'resist ghosthit %',
3064     type => 'int'
3065     }
3066     ],
3067     [
3068     'resist_poison',
3069     {
3070     name => 'resist poison %',
3071     type => 'int'
3072     }
3073     ],
3074     [
3075     'resist_death',
3076     {
3077     name => 'resist death-attack %',
3078     type => 'int'
3079     }
3080     ],
3081     [
3082     'resist_chaos',
3083     {
3084     name => 'resist chaos %',
3085     type => 'int'
3086     }
3087     ],
3088     [
3089     'resist_holyword',
3090     {
3091     name => 'resist holy power %',
3092     type => 'int'
3093     }
3094     ]
3095     ]
3096 root 1.4 ]
3097     ]
3098 root 1.1 },
3099 root 1.3 'Inventory Checker' => {
3100 root 1.7 attr => [
3101     [
3102     'no_pick',
3103     {
3104     type => 'fixed',
3105     value => 1
3106     }
3107     ],
3108     [
3109     'slaying',
3110     {
3111     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.',
3112     name => 'match key string',
3113     type => 'string'
3114     }
3115     ],
3116     [
3117     'race',
3118     {
3119     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>.',
3120     name => 'match arch name',
3121     type => 'string'
3122     }
3123     ],
3124     [
3125     'hp',
3126     {
3127     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. ;)',
3128     name => 'match type',
3129     type => 'int'
3130     }
3131     ],
3132     [
3133     'last_sp',
3134     {
3135     desc => 'Enabled means having that object is a match. Disabled means not having that object is a match.',
3136     name => 'match = having',
3137     type => 'bool'
3138     }
3139     ],
3140     [
3141     'connected',
3142     {
3143     desc => 'Whenever the inventory checker is triggered, all objects with identical <connection> value get activated. This only makes sense together with <blocking passage> disabled.',
3144     name => 'connection',
3145     type => 'int'
3146     }
3147     ],
3148     [
3149 root 1.14 'move_block',
3150 root 1.7 {
3151 root 1.14 desc => 'Objects using these movement types cannot move over this space.',
3152     name => 'blocked movement',
3153     type => 'bitmask',
3154     value => $BITMASK{movement_type}
3155     }
3156     ],
3157     [
3158     'move_allow',
3159     {
3160     desc => 'Objects using these movement types are allowed to move over this space. Takes precedence over \'blocked movements\'.',
3161     name => 'allowed movement',
3162     type => 'bitmask',
3163     value => $BITMASK{movement_type}
3164     }
3165     ],
3166     [
3167     'move_slow',
3168     {
3169     desc => 'The types of movement that should by slowed down by the \'slow movement penalty\'.',
3170     name => 'slowed movement',
3171     type => 'bitmask',
3172     value => $BITMASK{movement_type}
3173     }
3174     ],
3175     [
3176     'move_slow_penalty',
3177     {
3178     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)',
3179     name => 'slow movement penalty',
3180     type => 'int'
3181 root 1.7 }
3182     ],
3183     [
3184     'last_heal',
3185     {
3186     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!',
3187     name => 'remove match',
3188     type => 'bool'
3189     }
3190     ]
3191     ],
3192 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.',
3193 root 1.3 ignore => [
3194     $IGNORE_LIST{system_object}
3195     ],
3196 root 1.5 name => 'Inventory Checker',
3197 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.'
3198     },
3199 root 1.8 'Item Transformer' => {
3200     attr => [
3201     [
3202     'food',
3203     {
3204     desc => '<number of uses> controls how many times the item transformer can be used. The value 0 means "unlimited"',
3205     name => 'number of uses',
3206     type => 'int'
3207     }
3208     ],
3209     [
3210     'slaying',
3211     {
3212     desc => 'Contains the verb that is used to construct a message to the player applying the item transformer.',
3213     name => 'verb',
3214     type => 'string'
3215     }
3216     ],
3217     [
3218     'startequip',
3219     {
3220     desc => 'A godgiven item vanishes as soon as the player drops it to the ground.',
3221     name => 'godgiven item',
3222     type => 'bool'
3223     }
3224     ],
3225     [
3226     'msg',
3227     {
3228     desc => 'This text may contain a description of the item transformer.',
3229     end => 'endmsg',
3230     name => 'description',
3231     type => 'text'
3232     }
3233     ]
3234     ],
3235     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.',
3236     name => 'Item Transformer',
3237     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\'.'
3238     },
3239 root 1.3 Jewel => {
3240 root 1.7 attr => [
3241     [
3242     'race',
3243     {
3244     type => 'fixed',
3245     value => 'gold and jewels'
3246     }
3247     ],
3248     [
3249     'msg',
3250     {
3251     desc => 'This text may describe the object.',
3252     end => 'endmsg',
3253     name => 'description',
3254     type => 'text'
3255     }
3256     ]
3257     ],
3258 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.',
3259     name => 'Jewel'
3260 root 1.1 },
3261 root 1.9 Key => {
3262     attr => [
3263     [
3264     'startequip',
3265     {
3266     desc => 'A godgiven item vanishes as soon as the player drops it to the ground.',
3267     name => 'godgiven item',
3268     type => 'bool'
3269     }
3270     ]
3271     ],
3272     desc => 'When carrying a key, a normal door can be opened. The key will disappear.',
3273     name => 'Key'
3274     },
3275 root 1.3 'Locked Door' => {
3276 root 1.7 attr => [
3277     [
3278 root 1.14 'move_type',
3279 root 1.7 {
3280     type => 'fixed',
3281 root 1.14 value => 0
3282 root 1.7 }
3283     ],
3284     [
3285     'no_pick',
3286     {
3287     type => 'fixed',
3288     value => 1
3289     }
3290     ],
3291     [
3292     'slaying',
3293     {
3294     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 CF mapset. DONT EVER USE the default string "set_individual_value".',
3295     name => 'key string',
3296     type => 'string'
3297     }
3298     ],
3299     [
3300     'no_magic',
3301     {
3302     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).',
3303     name => 'restrict spells',
3304     type => 'bool'
3305     }
3306     ],
3307     [
3308     'damned',
3309     {
3310     desc => 'Restricting the use of prayers to pass this door. This should be set in most cases.',
3311     name => 'restrict prayers',
3312     type => 'bool'
3313     }
3314     ],
3315     [
3316     'msg',
3317     {
3318     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.',
3319     end => 'endmsg',
3320     name => 'lock message',
3321     type => 'text'
3322     }
3323     ]
3324     ],
3325     desc => 'A locked door can be opened only when carrying the appropriate special key.',
3326     ignore => [
3327     $IGNORE_LIST{non_pickable}
3328     ],
3329     name => 'Locked Door',
3330     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).'
3331     },
3332     'Magic Ear' => {
3333     attr => [
3334     [
3335     'no_pick',
3336     {
3337     type => 'fixed',
3338     value => 1
3339     }
3340     ],
3341     [
3342     'connected',
3343     {
3344     desc => 'The Magic_ear will trigger all objects with the same connection value, every time it is activated.',
3345     name => 'connection',
3346     type => 'int'
3347     }
3348     ],
3349     [
3350     'msg',
3351     {
3352     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!',
3353     end => 'endmsg',
3354     name => 'keyword-matching',
3355     type => 'text'
3356     }
3357     ]
3358     ],
3359     desc => 'Magic_ears trigger a connected value when the player speaks a specific keyword.',
3360     ignore => [
3361     $IGNORE_LIST{system_object}
3362     ],
3363     name => 'Magic Ear',
3364     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.'
3365     },
3366     'Magic Wall' => {
3367     attr => [
3368     [
3369     'dam',
3370     {
3371     desc => 'The magic wall will cast this <spell>.',
3372     name => 'spell',
3373     type => 'spell'
3374     }
3375     ],
3376     [
3377     'level',
3378     {
3379     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.',
3380     name => 'spell level',
3381     type => 'int'
3382     }
3383     ],
3384     [
3385     'connected',
3386     {
3387     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.',
3388     name => 'connection',
3389     type => 'int'
3390     }
3391     ],
3392     [
3393     'speed',
3394     {
3395     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".',
3396     name => 'casting speed',
3397     type => 'float'
3398     }
3399     ],
3400     [
3401     'sp',
3402     {
3403     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.',
3404     name => 'direction',
3405     type => 'list',
3406     value => $LIST{direction}
3407     }
3408     ],
3409     [
3410 root 1.14 'move_block',
3411     {
3412     desc => 'Objects using these movement types cannot move over this space.',
3413     name => 'blocked movement',
3414     type => 'bitmask',
3415     value => $BITMASK{movement_type}
3416     }
3417     ],
3418     [
3419     'move_allow',
3420     {
3421     desc => 'Objects using these movement types are allowed to move over this space. Takes precedence over \'blocked movements\'.',
3422     name => 'allowed movement',
3423     type => 'bitmask',
3424     value => $BITMASK{movement_type}
3425     }
3426     ],
3427     [
3428     'move_slow',
3429 root 1.7 {
3430 root 1.14 desc => 'The types of movement that should by slowed down by the \'slow movement penalty\'.',
3431     name => 'slowed movement',
3432     type => 'bitmask',
3433     value => $BITMASK{movement_type}
3434     }
3435     ],
3436     [
3437     'move_slow_penalty',
3438     {
3439     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)',
3440     name => 'slow movement penalty',
3441     type => 'int'
3442 root 1.7 }
3443     ]
3444 root 1.3 ],
3445     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.',
3446     ignore => [
3447     $IGNORE_LIST{non_pickable}
3448     ],
3449 root 1.5 name => 'Magic Wall',
3450 root 1.4 section => [
3451     [
3452     'destroyable',
3453 root 1.7 [
3454     [
3455     'alive',
3456     {
3457     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.',
3458     name => 'is destroyable',
3459     type => 'bool'
3460     }
3461     ],
3462     [
3463     'hp',
3464     {
3465     desc => 'The more <hitpoints> the wall has, the longer it takes to be destroyed.',
3466     name => 'hitpoints',
3467     type => 'int'
3468     }
3469     ],
3470     [
3471     'maxhp',
3472     {
3473     desc => '<max hitpoints> are the maximum amount of hitpoints the wall can have. This only makes sense if the wall can regain health.',
3474     name => 'max hitpoints',
3475     type => 'int'
3476     }
3477     ],
3478     [
3479     'ac',
3480     {
3481     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>.',
3482     name => 'armour class',
3483     type => 'int'
3484     }
3485     ]
3486     ]
3487     ],
3488     [
3489     'resistance',
3490     [
3491     [
3492     'resist_physical',
3493     {
3494     name => 'resist physical %',
3495     type => 'int'
3496     }
3497     ],
3498     [
3499     'resist_magic',
3500     {
3501     name => 'resist magic %',
3502     type => 'int'
3503     }
3504     ],
3505     [
3506     'resist_fire',
3507     {
3508     name => 'resist fire %',
3509     type => 'int'
3510     }
3511     ],
3512     [
3513     'resist_electricity',
3514     {
3515     name => 'resist electricity %',
3516     type => 'int'
3517     }
3518     ],
3519     [
3520     'resist_cold',
3521     {
3522     name => 'resist cold %',
3523     type => 'int'
3524     }
3525     ],
3526     [
3527     'resist_confusion',
3528     {
3529     name => 'resist confusion %',
3530     type => 'int'
3531     }
3532     ],
3533     [
3534     'resist_acid',
3535     {
3536     name => 'resist acid %',
3537     type => 'int'
3538     }
3539     ],
3540     [
3541     'resist_drain',
3542     {
3543     name => 'resist draining %',
3544     type => 'int'
3545     }
3546     ],
3547     [
3548     'resist_weaponmagic',
3549     {
3550     name => 'resist weaponmagic %',
3551     type => 'int'
3552     }
3553     ],
3554     [
3555     'resist_ghosthit',
3556     {
3557     name => 'resist ghosthit %',
3558     type => 'int'
3559     }
3560     ],
3561     [
3562     'resist_poison',
3563     {
3564     name => 'resist poison %',
3565     type => 'int'
3566     }
3567     ],
3568     [
3569     'resist_slow',
3570     {
3571     name => 'resist slow %',
3572     type => 'int'
3573     }
3574     ],
3575     [
3576     'resist_paralyze',
3577     {
3578     name => 'resist paralyze %',
3579     type => 'int'
3580     }
3581     ],
3582     [
3583     'resist_fear',
3584     {
3585     name => 'resist fear %',
3586     type => 'int'
3587     }
3588     ],
3589     [
3590     'resist_deplete',
3591     {
3592     name => 'resist depletion %',
3593     type => 'int'
3594     }
3595     ],
3596     [
3597     'resist_turn_undead',
3598     {
3599     name => 'resist turn undead %',
3600     type => 'int'
3601     }
3602     ],
3603     [
3604     'resist_death',
3605     {
3606     name => 'resist death-attack %',
3607     type => 'int'
3608     }
3609     ],
3610     [
3611     'resist_chaos',
3612     {
3613     name => 'resist chaos %',
3614     type => 'int'
3615     }
3616     ],
3617     [
3618     'resist_blind',
3619     {
3620     name => 'resist blinding %',
3621     type => 'int'
3622     }
3623     ],
3624     [
3625     'resist_holyword',
3626     {
3627     name => 'resist holy power %',
3628     type => 'int'
3629     }
3630     ],
3631     [
3632     'resist_godpower',
3633     {
3634     name => 'resist godpower %',
3635     type => 'int'
3636     }
3637     ]
3638     ]
3639     ]
3640     ],
3641     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".'
3642     },
3643     Marker => {
3644     attr => [
3645     [
3646     'no_pick',
3647     {
3648     type => 'fixed',
3649     value => 1
3650     }
3651     ],
3652     [
3653     'slaying',
3654     {
3655     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.',
3656     name => 'key string',
3657     type => 'string'
3658     }
3659     ],
3660     [
3661     'connected',
3662     {
3663     desc => 'When the detector is triggered, all objects with the same connection value get activated.',
3664     name => 'connection',
3665     type => 'int'
3666     }
3667     ],
3668     [
3669     'speed',
3670 root 1.4 {
3671 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.',
3672     name => 'marking speed',
3673     type => 'float'
3674 root 1.4 }
3675     ],
3676     [
3677 root 1.7 'food',
3678     {
3679     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.',
3680     name => 'mark duration',
3681     type => 'int'
3682     }
3683     ],
3684     [
3685     'name',
3686     {
3687     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.',
3688     name => 'delete mark',
3689     type => 'string'
3690     }
3691     ],
3692     [
3693     'msg',
3694 root 1.4 {
3695 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.',
3696     end => 'endmsg',
3697     name => 'marking message',
3698     type => 'text'
3699 root 1.4 }
3700     ]
3701     ],
3702 root 1.3 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. <br><br> Note that the player has no possibility to "see" his own marks, except by the effect that they cause on the maps.',
3703     ignore => [
3704     $IGNORE_LIST{system_object}
3705     ],
3706 root 1.5 name => 'Marker',
3707 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.'
3708     },
3709     Misc => {
3710 root 1.7 attr => [
3711     [
3712 root 1.14 'move_block',
3713     {
3714     desc => 'Objects using these movement types cannot move over this space.',
3715     name => 'blocked movement',
3716     type => 'bitmask',
3717     value => $BITMASK{movement_type}
3718     }
3719     ],
3720     [
3721     'move_allow',
3722     {
3723     desc => 'Objects using these movement types are allowed to move over this space. Takes precedence over \'blocked movements\'.',
3724     name => 'allowed movement',
3725     type => 'bitmask',
3726     value => $BITMASK{movement_type}
3727     }
3728     ],
3729     [
3730     'move_slow',
3731 root 1.7 {
3732 root 1.14 desc => 'The types of movement that should by slowed down by the \'slow movement penalty\'.',
3733     name => 'slowed movement',
3734     type => 'bitmask',
3735     value => $BITMASK{movement_type}
3736     }
3737     ],
3738     [
3739     'move_slow_penalty',
3740     {
3741     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)',
3742     name => 'slow movement penalty',
3743     type => 'int'
3744 root 1.7 }
3745     ],
3746     [
3747     'cursed',
3748     {
3749     desc => 'Curses can have various effects: On equipment and food, they generally harm the player in some way.',
3750     name => 'cursed',
3751     type => 'bool'
3752     }
3753     ],
3754     [
3755     'damned',
3756     {
3757     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.',
3758     name => 'damned',
3759     type => 'bool'
3760     }
3761     ],
3762     [
3763     'unique',
3764     {
3765     desc => 'Unique items exist only one time on a server. If the item is taken, lost or destroyed - it\'s gone for good.',
3766     name => 'unique item',
3767     type => 'bool'
3768     }
3769     ],
3770     [
3771     'startequip',
3772     {
3773     desc => 'A godgiven item vanishes as soon as the player drops it to the ground.',
3774     name => 'godgiven item',
3775     type => 'bool'
3776     }
3777     ],
3778     [
3779     'msg',
3780     {
3781     desc => 'This text may describe the object.',
3782     end => 'endmsg',
3783     name => 'description',
3784     type => 'text'
3785     }
3786     ]
3787     ],
3788 root 1.5 name => 'Misc'
3789 root 1.1 },
3790 root 1.3 Money => {
3791 root 1.7 attr => [
3792     [
3793     'race',
3794     {
3795     type => 'fixed',
3796     value => 'gold and jewels'
3797     }
3798     ]
3799     ],
3800 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.',
3801     ignore => [
3802     'unpaid'
3803 root 1.5 ],
3804     name => 'Money'
3805 root 1.3 },
3806     'Monster & NPC' => {
3807 root 1.7 attr => [
3808     [
3809     'alive',
3810     {
3811     type => 'fixed',
3812     value => 1
3813     }
3814     ],
3815     [
3816     'randomitems',
3817     {
3818     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>.',
3819     name => 'treasurelist',
3820     type => 'treasurelist'
3821     }
3822     ],
3823     [
3824     'level',
3825     {
3826     desc => 'A monster\'s <level> is the most important attribute. <level> affects the power of a monster in various ways.',
3827     name => 'level',
3828     type => 'int'
3829     }
3830     ],
3831     [
3832     'race',
3833     {
3834     desc => 'Every monster should have a race set to cathegorize 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.',
3835     name => 'race',
3836     type => 'string'
3837     }
3838     ],
3839     [
3840     'exp',
3841     {
3842     desc => 'When a player kills this monster, he will get exactly this amount of <experience>. The experience will flow into the skill-cathegory 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!',
3843     name => 'experience',
3844     type => 'int'
3845     }
3846     ],
3847     [
3848     'speed',
3849     {
3850     desc => 'The <speed> determines how fast a monster will both move and fight. High <speed> makes a monster considerably stronger.',
3851     name => 'speed',
3852     type => 'float'
3853     }
3854     ],
3855     [
3856     'other_arch',
3857     {
3858     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.',
3859     name => 'breed monster',
3860     type => 'string'
3861     }
3862     ],
3863     [
3864     'generator',
3865     {
3866     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.',
3867     name => 'multiply',
3868     type => 'bool'
3869     }
3870     ],
3871     [
3872     'use_content_on_gen',
3873     {
3874     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.',
3875     name => 'template generation',
3876     type => 'bool'
3877     }
3878     ],
3879     [
3880 root 1.14 'move_type',
3881 root 1.7 {
3882 root 1.14 desc => 'Determines which kinds of movement this object can use (e.g. for monsters) or grants (e.g. for amulets).',
3883     name => 'movement type',
3884     type => 'bitmask',
3885     value => $BITMASK{movement_type}
3886 root 1.7 }
3887     ],
3888     [
3889     'undead',
3890     {
3891     desc => 'Several spells only affect undead monsters: turn undead, banish undead, holy word, etc.',
3892     name => 'undead',
3893     type => 'bool'
3894     }
3895     ],
3896     [
3897     'carrying',
3898     {
3899     desc => 'If a monster has something in the inventory, this value can be set to reflect the slowdown due to the carried weight.',
3900     name => 'carries weight',
3901     type => 'int'
3902     }
3903     ],
3904     [
3905     'msg',
3906     {
3907     end => 'endmsg',
3908     name => 'npc message',
3909     type => 'text'
3910     }
3911     ]
3912     ],
3913 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.',
3914     ignore => [
3915     'material',
3916     'name_pl',
3917     'nrof',
3918     'value',
3919     'unpaid'
3920     ],
3921 root 1.5 name => 'Monster & NPC',
3922 root 1.3 required => {
3923     alive => 1,
3924     is_floor => 0,
3925     tear_down => 0
3926     },
3927 root 1.4 section => [
3928     [
3929     'melee',
3930 root 1.7 [
3931     [
3932     'attacktype',
3933     {
3934     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.',
3935     name => 'attacktype',
3936     type => 'bitmask',
3937     value => $BITMASK{attacktype}
3938     }
3939     ],
3940     [
3941     'dam',
3942     {
3943     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.',
3944     name => 'damage',
3945     type => 'int'
3946     }
3947     ],
3948     [
3949     'wc',
3950     {
3951     desc => 'Monsters of high <weapon class> are more likely to really hit their opponent. <weapon class> can be considered the "counterpiece" to <armour class>.',
3952     name => 'weapon class',
3953     type => 'int'
3954     }
3955     ],
3956     [
3957     'hp',
3958     {
3959     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>.',
3960     name => 'health points',
3961     type => 'int'
3962     }
3963     ],
3964     [
3965     'maxhp',
3966     {
3967     desc => '<max health> is the maximum amount of <health points> this monster can have.',
3968     name => 'max health',
3969     type => 'int'
3970     }
3971     ],
3972     [
3973     'ac',
3974     {
3975     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).',
3976     name => 'armour class',
3977     type => 'int'
3978     }
3979     ],
3980     [
3981     'Con',
3982     {
3983 root 1.8 desc => 'Monsters regenerate this many health points each 4 ticks. Hence, the healing rate is independent of <speed>.',
3984 root 1.7 name => 'healing rate',
3985     type => 'int'
3986     }
3987     ],
3988     [
3989     'reflect_missile',
3990     {
3991     desc => 'A monster with this flag has the ability to <reflect missiles>, all kinds of projectiles (e.g. arrows, bolts, boulders) will bounce off.',
3992     name => 'reflect missiles',
3993     type => 'bool'
3994     }
3995     ],
3996     [
3997     'hitback',
3998     {
3999     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.',
4000     name => 'hitback',
4001     type => 'bool'
4002     }
4003     ],
4004     [
4005     'one_hit',
4006     {
4007     desc => 'Monsters with <one hit only> dissapear after one successful hit to a player.',
4008     name => 'one hit only',
4009     type => 'bool'
4010     }
4011     ]
4012     ]
4013     ],
4014     [
4015     'spellcraft',
4016     [
4017     [
4018     'can_cast_spell',
4019     {
4020     desc => 'If <can cast spell> is disabled, the monster cannot cast any spell. Only wands/rods/etc can be used, given the appropriate abilities.',
4021     name => 'can cast spell',
4022     type => 'bool'
4023     }
4024     ],
4025     [
4026     'reflect_spell',
4027     {
4028     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.',
4029     name => 'reflect spells',
4030     type => 'bool'
4031     }
4032     ],
4033     [
4034     'sp',
4035     {
4036     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>.',
4037     name => 'spellpoints',
4038     type => 'int'
4039     }
4040     ],
4041     [
4042     'maxsp',
4043     {
4044     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.',
4045     name => 'max spellpoints',
4046     type => 'int'
4047     }
4048     ],
4049     [
4050     'Pow',
4051     {
4052 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.',
4053 root 1.7 name => 'spellpoint regen.',
4054     type => 'int'
4055     }
4056     ],
4057     [
4058     'path_attuned',
4059     {
4060     desc => 'Click on the <attuned paths> button to select spellpaths. The creature will get attuned to the specified spellpaths.',
4061     name => 'attuned paths',
4062     type => 'bitmask',
4063     value => $BITMASK{spellpath}
4064     }
4065     ],
4066     [
4067     'path_repelled',
4068     {
4069     desc => 'Click on the <repelled paths> button to select spellpaths. The creature will get repelled to the specified spellpaths.',
4070     name => 'repelled paths',
4071     type => 'bitmask',
4072     value => $BITMASK{spellpath}
4073     }
4074     ],
4075     [
4076     'path_denied',
4077     {
4078     desc => 'Click on the <denied paths> button to select spellpaths. The creature won\'t be able to cast spells of the specified paths.',
4079     name => 'denied paths',
4080     type => 'bitmask',
4081     value => $BITMASK{spellpath}
4082     }
4083     ]
4084     ]
4085     ],
4086     [
4087     'ability',
4088     [
4089     [
4090     'Int',
4091     {
4092     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.',
4093     name => 'detect hidden',
4094     type => 'int'
4095     }
4096     ],
4097     [
4098     'see_invisible',
4099     {
4100     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.',
4101     name => 'see invisible',
4102     type => 'bool'
4103     }
4104     ],
4105     [
4106     'can_see_in_dark',
4107     {
4108     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.',
4109     name => 'see in darkness',
4110     type => 'bool'
4111     }
4112     ],
4113     [
4114     'can_use_weapon',
4115     {
4116     desc => 'Monster is able to wield weapon type objects.',
4117     name => 'can use weapons',
4118     type => 'bool'
4119     }
4120     ],
4121     [
4122     'can_use_bow',
4123     {
4124     desc => 'Monster is able to use missile-weapon type objects.',
4125     name => 'can use bows',
4126     type => 'bool'
4127     }
4128     ],
4129     [
4130     'can_use_armour',
4131     {
4132     desc => 'Monster is able to wear protective equipment like brestplate armour, shields, helmets etc.',
4133     name => 'can use armour',
4134     type => 'bool'
4135     }
4136     ],
4137     [
4138     'can_use_ring',
4139     {
4140     desc => 'Monster is able to wear rings.',
4141     name => 'can use rings',
4142     type => 'bool'
4143     }
4144     ],
4145     [
4146     'can_use_wand',
4147     {
4148     desc => 'Monster is able to use wands and staves.',
4149     name => 'can use wands',
4150     type => 'bool'
4151     }
4152     ],
4153     [
4154     'can_use_rod',
4155     {
4156     desc => 'Monster is able to use rods.',
4157     name => 'can use rods',
4158     type => 'bool'
4159     }
4160     ],
4161     [
4162     'can_use_scroll',
4163     {
4164     desc => 'Monster is able to read scrolls.',
4165     name => 'can use scrolls',
4166     type => 'bool'
4167     }
4168     ],
4169     [
4170     'can_use_skill',
4171     {
4172     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>.',
4173     name => 'can use skills',
4174     type => 'bool'
4175     }
4176     ]
4177     ]
4178     ],
4179     [
4180     'behave',
4181     [
4182     [
4183     'monster',
4184     {
4185     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.',
4186     name => 'monster behaviour',
4187     type => 'bool'
4188     }
4189     ],
4190     [
4191     'unaggressive',
4192     {
4193     desc => '<unaggressive> monsters do not attack players unless attacked first.',
4194     name => 'unaggressive',
4195     type => 'bool'
4196     }
4197     ],
4198     [
4199     'friendly',
4200     {
4201     desc => '<friendly> monsters help the player, attacking any non-friendly monsters in range.',
4202     name => 'friendly',
4203     type => 'bool'
4204     }
4205     ],
4206     [
4207     'stand_still',
4208     {
4209     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 Crossfire 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.',
4210     name => 'stand still',
4211     type => 'bool'
4212     }
4213     ],
4214     [
4215     'sleep',
4216     {
4217     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.',
4218     name => 'asleep',
4219     type => 'bool'
4220     }
4221     ],
4222     [
4223     'will_apply',
4224     {
4225     desc => 'This entry defines which kinds of environment actions the creature is able to perform.',
4226     name => 'misc. actions',
4227     type => 'bitmask',
4228     value => $BITMASK{will_apply}
4229     }
4230     ],
4231     [
4232     'pick_up',
4233     {
4234     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.',
4235     name => 'pick up',
4236     type => 'bitmask',
4237     value => $BITMASK{pick_up}
4238     }
4239     ],
4240     [
4241     'Wis',
4242     {
4243     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.',
4244     name => 'sensing range',
4245     type => 'int'
4246     }
4247     ],
4248     [
4249     'attack_movement',
4250     {
4251     name => 'attack movement',
4252     type => 'int'
4253     }
4254     ],
4255     [
4256     'run_away',
4257     {
4258     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.',
4259     name => 'run at % health',
4260     type => 'int'
4261     }
4262     ]
4263     ]
4264     ],
4265     [
4266     'resistance',
4267     [
4268     [
4269     'resist_physical',
4270     {
4271     name => 'resist physical %',
4272     type => 'int'
4273     }
4274     ],
4275     [
4276     'resist_magic',
4277     {
4278     name => 'resist magic %',
4279     type => 'int'
4280     }
4281     ],
4282     [
4283     'resist_fire',
4284     {
4285     name => 'resist fire %',
4286     type => 'int'
4287     }
4288     ],
4289     [
4290     'resist_electricity',
4291     {
4292     name => 'resist electricity %',
4293     type => 'int'
4294     }
4295     ],
4296     [
4297     'resist_cold',
4298     {
4299     name => 'resist cold %',
4300     type => 'int'
4301     }
4302     ],
4303     [
4304     'resist_confusion',
4305     {
4306     name => 'resist confusion %',
4307     type => 'int'
4308     }
4309     ],
4310     [
4311     'resist_acid',
4312     {
4313     name => 'resist acid %',
4314     type => 'int'
4315     }
4316     ],
4317     [
4318     'resist_drain',
4319     {
4320     name => 'resist draining %',
4321     type => 'int'
4322     }
4323     ],
4324     [
4325     'resist_weaponmagic',
4326     {
4327     name => 'resist weaponmagic %',
4328     type => 'int'
4329     }
4330     ],
4331     [
4332     'resist_ghosthit',
4333     {
4334     name => 'resist ghosthit %',
4335     type => 'int'
4336     }
4337     ],
4338     [
4339     'resist_poison',
4340     {
4341     name => 'resist poison %',
4342     type => 'int'
4343     }
4344     ],
4345     [
4346     'resist_slow',
4347     {
4348     name => 'resist slow %',
4349     type => 'int'
4350     }
4351     ],
4352     [
4353     'resist_paralyze',
4354     {
4355     name => 'resist paralyze %',
4356     type => 'int'
4357     }
4358     ],
4359     [
4360     'resist_fear',
4361     {
4362     name => 'resist fear %',
4363     type => 'int'
4364     }
4365     ],
4366     [
4367     'resist_deplete',
4368     {
4369     name => 'resist depletion %',
4370     type => 'int'
4371     }
4372     ],
4373     [
4374     'resist_turn_undead',
4375     {
4376     name => 'resist turn undead %',
4377     type => 'int'
4378     }
4379     ],
4380     [
4381     'resist_death',
4382     {
4383     name => 'resist death-attack %',
4384     type => 'int'
4385     }
4386     ],
4387     [
4388     'resist_chaos',
4389     {
4390     name => 'resist chaos %',
4391     type => 'int'
4392     }
4393     ],
4394     [
4395     'resist_blind',
4396     {
4397     name => 'resist blinding %',
4398     type => 'int'
4399     }
4400     ],
4401     [
4402     'resist_holyword',
4403     {
4404     name => 'resist holy power %',
4405     type => 'int'
4406     }
4407     ],
4408     [
4409     'resist_godpower',
4410     {
4411     name => 'resist godpower %',
4412     type => 'int'
4413     }
4414     ]
4415     ]
4416     ]
4417     ],
4418     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. :-)'
4419     },
4420 root 1.9 'Monster (Grimreaper)' => {
4421     desc => 'A grimreaper is a monster that vanishes after it did some number of draining attacks.',
4422     ignore => [
4423     'material',
4424     'name_pl',
4425     'nrof',
4426     'value',
4427     'unpaid'
4428     ],
4429     import => [
4430     $TYPE{'Monster & NPC'}
4431     ],
4432     name => 'Monster (Grimreaper)',
4433     section => [
4434     [
4435     'grimreaper',
4436     [
4437     [
4438     'value',
4439     {
4440     desc => 'The object vanishes after this number of draining attacks.',
4441     name => 'attacks',
4442     type => 'int'
4443     }
4444     ]
4445     ]
4446     ]
4447     ]
4448     },
4449 root 1.7 'Mood Floor' => {
4450     attr => [
4451     [
4452     'no_pick',
4453 root 1.4 {
4454 root 1.7 type => 'fixed',
4455     value => 1
4456 root 1.4 }
4457     ],
4458     [
4459 root 1.7 'last_sp',
4460     {
4461     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!',
4462     name => 'mood',
4463     type => 'list',
4464     value => $LIST{mood}
4465     }
4466     ],
4467     [
4468     'connected',
4469     {
4470     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!',
4471     name => 'connection',
4472     type => 'int'
4473     }
4474     ],
4475     [
4476     'no_magic',
4477     {
4478     desc => 'If enabled, it is impossible for players to use (wizard-) spells on that spot.',
4479     name => 'no spells',
4480     type => 'bool'
4481     }
4482     ],
4483     [
4484     'damned',
4485     {
4486     desc => 'If enabled, it is impossible for players to use prayers on that spot. It also prevents players from saving.',
4487     name => 'no prayers',
4488     type => 'bool'
4489     }
4490     ]
4491     ],
4492     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.',
4493     ignore => [
4494     $IGNORE_LIST{system_object}
4495     ],
4496     name => 'Mood Floor',
4497     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.)'
4498     },
4499     Mover => {
4500     attr => [
4501     [
4502     'attacktype',
4503     {
4504     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.',
4505     name => 'forced movement',
4506     type => 'bool'
4507     }
4508     ],
4509     [
4510     'maxsp',
4511     {
4512     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.',
4513     name => 'freeze duration',
4514     type => 'int'
4515     }
4516     ],
4517     [
4518     'speed',
4519     {
4520     desc => 'The movement speed value determines how fast a chain of these movers will push a player along (default is -0.2).',
4521     name => 'movement speed',
4522     type => 'float'
4523     }
4524     ],
4525     [
4526     'sp',
4527     {
4528     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.',
4529     name => 'direction',
4530     type => 'list',
4531     value => $LIST{direction}
4532     }
4533     ],
4534     [
4535     'lifesave',
4536     {
4537 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.',
4538 root 1.7 name => 'gets used up',
4539     type => 'bool'
4540     }
4541     ],
4542     [
4543     'hp',
4544     {
4545     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).',
4546     name => 'number of uses',
4547     type => 'int'
4548     }
4549     ]
4550     ],
4551     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.',
4552     ignore => [
4553     $IGNORE_LIST{non_pickable}
4554     ],
4555     name => 'Mover',
4556     section => [
4557     [
4558     'targets',
4559     [
4560     [
4561     'level',
4562     {
4563     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.',
4564     name => 'move players',
4565     type => 'bool'
4566     }
4567     ],
4568     [
4569 root 1.14 'move_on',
4570 root 1.7 {
4571 root 1.14 desc => 'Which movement types activate the mover.',
4572     name => 'movement type',
4573     type => 'movement_type'
4574 root 1.7 }
4575     ]
4576     ]
4577     ]
4578     ],
4579     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).'
4580     },
4581     Pedestal => {
4582     attr => [
4583     [
4584     'no_pick',
4585 root 1.4 {
4586 root 1.7 type => 'fixed',
4587     value => 1
4588 root 1.4 }
4589     ],
4590     [
4591 root 1.7 'slaying',
4592 root 1.4 {
4593 root 1.7 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.',
4594     name => 'match race',
4595     type => 'string'
4596 root 1.4 }
4597     ],
4598     [
4599 root 1.7 'connected',
4600 root 1.4 {
4601 root 1.7 desc => 'When the pedestal is triggered, all objects with the same connection value get activated.',
4602     name => 'connection',
4603     type => 'int'
4604 root 1.4 }
4605     ],
4606     [
4607 root 1.14 'move_on',
4608 root 1.4 {
4609 root 1.14 desc => 'Which movement types automatically (as opposed to manually) activate this object.',
4610     name => 'movement type',
4611     type => 'bitmask',
4612     value => $BITMASK{movement_type}
4613 root 1.4 }
4614     ]
4615     ],
4616 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.',
4617     ignore => [
4618     $IGNORE_LIST{non_pickable}
4619     ],
4620 root 1.5 name => 'Pedestal',
4621 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.'
4622     },
4623     Pit => {
4624 root 1.7 attr => [
4625     [
4626     'no_pick',
4627     {
4628     type => 'fixed',
4629     value => 1
4630     }
4631     ],
4632     [
4633     'connected',
4634     {
4635     desc => 'When a <connection> value is set, the pit can be opened/closed by activating the connection.',
4636     name => 'connection',
4637     type => 'int'
4638     }
4639     ],
4640     [
4641     'hp',
4642     {
4643     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!',
4644     name => 'destination X',
4645     type => 'int'
4646     }
4647     ],
4648     [
4649     'sp',
4650     {
4651     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!',
4652     name => 'destination Y',
4653     type => 'int'
4654     }
4655     ],
4656     [
4657     'wc',
4658     {
4659     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.',
4660     name => 'position state',
4661     type => 'int'
4662     }
4663     ],
4664     [
4665 root 1.14 'move_on',
4666 root 1.7 {
4667 root 1.14 desc => 'Which movement types automatically (as opposed to manually) activate this object.',
4668     name => 'movement type',
4669     type => 'bitmask',
4670     value => $BITMASK{movement_type}
4671 root 1.7 }
4672     ]
4673     ],
4674 root 1.3 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 two-square 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.',
4675     ignore => [
4676     $IGNORE_LIST{non_pickable}
4677     ],
4678 root 1.5 name => 'Pit',
4679 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.'
4680     },
4681     'Poison Food' => {
4682 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.',
4683     name => 'Poison Food'
4684 root 1.3 },
4685     Potion => {
4686 root 1.7 attr => [
4687     [
4688     'level',
4689     {
4690     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.',
4691     name => 'potion level',
4692     type => 'int'
4693     }
4694     ],
4695     [
4696     'sp',
4697     {
4698     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".',
4699     name => 'spell',
4700     type => 'spell'
4701     }
4702     ],
4703     [
4704     'attacktype',
4705     {
4706     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.',
4707     name => 'special effect',
4708     type => 'list',
4709     value => $LIST{potion_effect}
4710     }
4711     ],
4712     [
4713     'cursed',
4714     {
4715     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 >:)',
4716     name => 'cursed',
4717     type => 'bool'
4718     }
4719     ],
4720     [
4721     'startequip',
4722     {
4723     desc => 'A godgiven item vanishes as soon as the player drops it to the ground.',
4724     name => 'godgiven item',
4725     type => 'bool'
4726     }
4727     ]
4728     ],
4729 root 1.3 desc => 'The player can drink these and gain various kinds of benefits (/penalties) by doing so.',
4730 root 1.5 name => 'Potion',
4731 root 1.4 section => [
4732     [
4733     'stats',
4734 root 1.7 [
4735     [
4736     'Str',
4737     {
4738     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.',
4739     name => 'strength',
4740     type => 'int'
4741     }
4742     ],
4743     [
4744     'Dex',
4745     {
4746     desc => 'The player\'s dexterity 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.',
4747     name => 'dexterity',
4748     type => 'int'
4749     }
4750     ],
4751     [
4752     'Con',
4753     {
4754     desc => 'The player\'s constitution 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.',
4755     name => 'constitution',
4756     type => 'int'
4757     }
4758     ],
4759     [
4760     'Int',
4761     {
4762     desc => 'The player\'s intelligence 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.',
4763     name => 'intelligence',
4764     type => 'int'
4765     }
4766     ],
4767     [
4768     'Pow',
4769     {
4770     desc => 'The player\'s power 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.',
4771     name => 'power',
4772     type => 'int'
4773     }
4774     ],
4775     [
4776     'Wis',
4777     {
4778     desc => 'The player\'s wisdom 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.',
4779     name => 'wisdom',
4780     type => 'int'
4781     }
4782     ],
4783     [
4784     'Cha',
4785     {
4786     desc => 'The player\'s charisma 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.',
4787     name => 'charisma',
4788     type => 'int'
4789     }
4790     ]
4791     ]
4792     ],
4793     [
4794     'resistance',
4795     [
4796     [
4797     'resist_physical',
4798     {
4799     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!',
4800     name => 'resist physical %',
4801     type => 'int'
4802     }
4803     ],
4804     [
4805     'resist_magic',
4806     {
4807     desc => 'The player\'s resistance to magic 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!',
4808     name => 'resist magic %',
4809     type => 'int'
4810     }
4811     ],
4812     [
4813     'resist_fire',
4814     {
4815     desc => 'The player\'s resistance to fire 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!',
4816     name => 'resist fire %',
4817     type => 'int'
4818     }
4819     ],
4820     [
4821     'resist_electricity',
4822     {
4823     desc => 'The player\'s resistance to electricity 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!',
4824     name => 'resist electricity %',
4825     type => 'int'
4826     }
4827     ],
4828     [
4829     'resist_cold',
4830     {
4831     desc => 'The player\'s resistance to cold 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!',
4832     name => 'resist cold %',
4833     type => 'int'
4834     }
4835     ],
4836     [
4837     'resist_acid',
4838     {
4839     desc => 'The player\'s resistance to acid 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!',
4840     name => 'resist acid %',
4841     type => 'int'
4842     }
4843     ],
4844     [
4845     'resist_confusion',
4846     {
4847     desc => 'The player\'s resistance to confusion 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!',
4848     name => 'resist confusion %',
4849     type => 'int'
4850     }
4851     ],
4852     [
4853     'resist_weaponmagic',
4854     {
4855     desc => 'The player\'s resistance to weaponmagic 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!',
4856     name => 'resist weaponmagic %',
4857     type => 'int'
4858     }
4859     ],
4860     [
4861     'resist_paralyze',
4862     {
4863     desc => 'The player\'s resistance to paralyze 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!',
4864     name => 'resist paralyze %',
4865     type => 'int'
4866     }
4867     ],
4868     [
4869     'resist_drain',
4870     {
4871     desc => 'The player\'s resistance to draining 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!',
4872     name => 'resist draining %',
4873     type => 'int'
4874     }
4875     ],
4876     [
4877     'resist_deplete',
4878     {
4879     desc => 'The player\'s resistance to depletion 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!',
4880     name => 'resist depletion %',
4881     type => 'int'
4882     }
4883     ],
4884     [
4885     'resist_poison',
4886     {
4887     desc => 'The player\'s resistance to poison 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!',
4888     name => 'resist poison %',
4889     type => 'int'
4890     }
4891     ]
4892     ]
4893     ]
4894     ],
4895     use => 'One potion should never give multiple benefits at once.'
4896     },
4897     'Power Crystal' => {
4898     attr => [
4899     [
4900     'sp',
4901 root 1.4 {
4902 root 1.7 desc => '<initial mana> is the amount of spellpoints that the crystal holds when the map is loaded.',
4903     name => 'initial mana',
4904     type => 'int'
4905 root 1.4 }
4906     ],
4907     [
4908 root 1.7 'maxsp',
4909 root 1.4 {
4910 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.',
4911     name => 'mana capacity',
4912     type => 'int'
4913 root 1.4 }
4914     ]
4915     ],
4916 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.',
4917     name => 'Power Crystal'
4918 root 1.1 },
4919 root 1.3 Projectile => {
4920 root 1.7 attr => [
4921     [
4922     'attacktype',
4923     {
4924     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.',
4925     name => 'attacktype',
4926     type => 'bitmask',
4927     value => $BITMASK{attacktype}
4928     }
4929     ],
4930     [
4931     'race',
4932     {
4933     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>.',
4934     name => 'ammunition class',
4935     type => 'string'
4936     }
4937     ],
4938     [
4939     'slaying',
4940     {
4941     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.',
4942     name => 'slaying race',
4943     type => 'string'
4944     }
4945     ],
4946     [
4947     'dam',
4948     {
4949     desc => 'The projectile <damage> significantly affects the damage done. Damage can be further increased by the shooting weapon\'s attributes.',
4950     name => 'damage',
4951     type => 'int'
4952     }
4953     ],
4954     [
4955     'wc',
4956     {
4957     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.',
4958     name => 'weaponclass',
4959     type => 'int'
4960     }
4961     ],
4962     [
4963     'food',
4964     {
4965     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).',
4966     name => 'chance to break',
4967     type => 'int'
4968     }
4969     ],
4970     [
4971     'magic',
4972     {
4973     desc => 'Magic bonus increases chance to hit and damage a little bit.',
4974     name => 'magic bonus',
4975     type => 'int'
4976     }
4977     ],
4978     [
4979     'unique',
4980     {
4981     desc => 'Unique items exist only one time on a server. If the item is taken, lost or destroyed - it\'s gone for good.',
4982     name => 'unique item',
4983     type => 'bool'
4984     }
4985     ],
4986     [
4987     'startequip',
4988     {
4989     desc => 'A godgiven item vanishes as soon as the player drops it to the ground.',
4990     name => 'godgiven item',
4991     type => 'bool'
4992     }
4993     ],
4994     [
4995     'no_drop',
4996     {
4997     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.',
4998     name => 'don\'t drop',
4999     type => 'bool'
5000     }
5001     ],
5002     [
5003     'msg',
5004     {
5005     desc => 'This text may describe the projectile. This could be nice for very special ones.',
5006     end => 'endmsg',
5007     name => 'description',
5008     type => 'text'
5009     }
5010     ]
5011     ],
5012     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.',
5013     name => 'Projectile',
5014     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.'
5015     },
5016     Ring => {
5017     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.',
5018     import => [
5019     $TYPE{Amulet}
5020     ],
5021     name => 'Ring',
5022     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.'
5023     },
5024     Rod => {
5025     attr => [
5026     [
5027     'sp',
5028     {
5029     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!',
5030     name => 'spell',
5031     type => 'spell'
5032     }
5033     ],
5034     [
5035     'level',
5036     {
5037     desc => 'The casting level of the <spell> determines it\'s power. For attack spells, level should be set to something reasonable.',
5038     name => 'casting level',
5039     type => 'int'
5040     }
5041     ],
5042     [
5043     'hp',
5044     {
5045     desc => 'This value represents the initial amount of spellpoints in the rod. Naturally, this is quite unimportant.',
5046     name => 'initial spellpoints',
5047     type => 'int'
5048     }
5049     ],
5050     [
5051     'maxhp',
5052     {
5053     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.',
5054     name => 'max. spellpoints',
5055     type => 'int'
5056     }
5057     ],
5058     [
5059     'startequip',
5060     {
5061     desc => 'A godgiven item vanishes as soon as the player drops it to the ground.',
5062     name => 'godgiven item',
5063     type => 'bool'
5064     }
5065     ],
5066     [
5067     'msg',
5068     {
5069     desc => 'This text may contain a description of the rod.',
5070     end => 'endmsg',
5071     name => 'description',
5072     type => 'text'
5073     }
5074     ]
5075     ],
5076     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.',
5077     ignore => [
5078     'title'
5079     ],
5080     name => 'Rod',
5081     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>'
5082     },
5083     Rune => {
5084     attr => [
5085     [
5086     'no_pick',
5087     {
5088     type => 'fixed',
5089     value => 1
5090     }
5091     ],
5092     [
5093 root 1.14 'move_on',
5094 root 1.7 {
5095 root 1.14 desc => 'Which movement types automatically (as opposed to manually) activate this object.',
5096     name => 'movement type',
5097     type => 'bitmask',
5098     value => $BITMASK{movement_type}
5099 root 1.7 }
5100     ],
5101     [
5102     'level',
5103     {
5104     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.',
5105     name => 'rune level',
5106     type => 'int'
5107     }
5108     ],
5109     [
5110     'Cha',
5111     {
5112     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.',
5113     name => 'visibility',
5114     type => 'int'
5115     }
5116     ],
5117     [
5118     'hp',
5119     {
5120     desc => 'The rune will detonate <number of charges> times before disappearing.',
5121     name => 'number of charges',
5122     type => 'int'
5123     }
5124     ],
5125     [
5126     'dam',
5127     {
5128     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.',
5129     name => 'direct damage',
5130     type => 'int'
5131     }
5132     ],
5133     [
5134     'attacktype',
5135     {
5136     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.',
5137     name => 'attacktype',
5138     type => 'bitmask',
5139     value => $BITMASK{attacktype}
5140     }
5141     ],
5142     [
5143     'msg',
5144     {
5145     desc => 'When the rune detonates, this text is displayed to the victim. For especially powerful runes, create an appropriate thrilling description. ;)',
5146     end => 'endmsg',
5147     name => 'detonation text',
5148     type => 'text'
5149     }
5150     ]
5151 root 1.3 ],
5152     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.',
5153     ignore => [
5154     'no_pick',
5155     'title',
5156     'name_pl',
5157     'weight',
5158     'value',
5159     'material',
5160     'unpaid'
5161     ],
5162 root 1.5 name => 'Rune',
5163 root 1.4 section => [
5164     [
5165     'spellcraft',
5166 root 1.7 [
5167     [
5168     'sp',
5169     {
5170     desc => 'The selected <spell> defines the spell in the rune, if any. (Many runes do direct damage).',
5171     name => 'spell',
5172     type => 'spell'
5173     }
5174     ],
5175     [
5176     'slaying',
5177     {
5178     desc => 'Name of the spell in the rune, if any. <spell name> is optional, but if present, overrides the <spell> setting.',
5179     name => 'spell name',
5180     type => 'string'
5181     }
5182     ],
5183     [
5184     'other_arch',
5185     {
5186     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.',
5187     name => 'spell arch',
5188     type => 'string'
5189     }
5190     ],
5191     [
5192     'maxsp',
5193     {
5194     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.',
5195     name => 'direction',
5196     type => 'list',
5197     value => $LIST{direction}
5198     }
5199     ],
5200     [
5201     'race',
5202     {
5203     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.',
5204     name => 'summon monster',
5205     type => 'string'
5206     }
5207     ],
5208     [
5209     'maxhp',
5210     {
5211     desc => 'This should only be set to a summoning rune. It will then summon that many creatures of the kind <summon monster>.',
5212     name => 'summon amount',
5213     type => 'int'
5214     }
5215     ]
5216     ]
5217 root 1.4 ]
5218     ],
5219 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.'
5220     },
5221     Savebed => {
5222 root 1.7 attr => [
5223     [
5224     'no_pick',
5225     {
5226     type => 'fixed',
5227     value => 1
5228     }
5229     ],
5230     [
5231     'no_magic',
5232     {
5233     type => 'fixed',
5234     value => 1
5235     }
5236     ],
5237     [
5238     'damned',
5239     {
5240     type => 'fixed',
5241     value => 1
5242     }
5243     ]
5244     ],
5245 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.',
5246     ignore => [
5247     $IGNORE_LIST{non_pickable}
5248     ],
5249 root 1.5 name => 'Savebed',
5250 root 1.3 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 relyable 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>'
5251     },
5252     Scroll => {
5253 root 1.7 attr => [
5254     [
5255     'level',
5256     {
5257     desc => 'The spell of the scroll will be casted at this level. This value should always be set, at least to 1.',
5258     name => 'casting level',
5259     type => 'int'
5260     }
5261     ],
5262     [
5263     'sp',
5264     {
5265     desc => 'When a player/monster applies this scroll, the selected <spell> will be casted (once). This should work for any given spell.',
5266     name => 'spell',
5267     type => 'spell'
5268     }
5269     ],
5270     [
5271     'startequip',
5272     {
5273     desc => 'A godgiven item vanishes as soon as the player drops it to the ground.',
5274     name => 'godgiven item',
5275     type => 'bool'
5276     }
5277     ]
5278     ],
5279 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.',
5280     ignore => [
5281     'title'
5282     ],
5283 root 1.5 name => 'Scroll',
5284 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.'
5285     },
5286     Shield => {
5287 root 1.7 attr => [
5288     [
5289     'magic',
5290     {
5291     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.',
5292     name => 'magic bonus',
5293     type => 'int'
5294     }
5295     ]
5296     ],
5297 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.',
5298     import => [
5299     $TYPE{Amulet}
5300     ],
5301 root 1.5 name => 'Shield',
5302 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.'
5303     },
5304     'Shooting Weapon' => {
5305 root 1.7 attr => [
5306     [
5307     'race',
5308     {
5309     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.',
5310     name => 'ammunition class',
5311     type => 'string'
5312     }
5313     ],
5314     [
5315     'sp',
5316     {
5317     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).',
5318     name => 'shooting speed',
5319     type => 'int'
5320     }
5321     ],
5322     [
5323     'dam',
5324     {
5325     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.',
5326     name => 'base damage',
5327     type => 'int'
5328     }
5329     ],
5330     [
5331     'wc',
5332     {
5333     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.',
5334     name => 'weaponclass',
5335     type => 'int'
5336     }
5337     ],
5338     [
5339     'item_power',
5340     {
5341     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 CF server will calculate a provisional value at runtime, but this is never going to be an accurate measurement of <item power>.',
5342     name => 'item power',
5343     type => 'int'
5344     }
5345     ],
5346     [
5347     'no_strength',
5348     {
5349     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.',
5350     name => 'ignore strength',
5351     type => 'bool'
5352     }
5353     ],
5354     [
5355     'damned',
5356     {
5357     desc => 'A damned shooting weapon cannot be unwielded unless the curse is removed. Removing damnations is a tick harder than removing curses.',
5358     name => 'damnation',
5359     type => 'bool'
5360     }
5361     ],
5362     [
5363     'cursed',
5364     {
5365     desc => 'A cursed shooting weapon cannot be unwielded unless the curse is removed.',
5366     name => 'curse',
5367     type => 'bool'
5368     }
5369     ],
5370     [
5371     'unique',
5372     {
5373     desc => 'Unique items exist only one time on a server. If the item is taken, lost or destroyed - it\'s gone for good.',
5374     name => 'unique item',
5375     type => 'bool'
5376     }
5377     ],
5378     [
5379     'startequip',
5380     {
5381     desc => 'A godgiven item vanishes as soon as the player drops it to the ground.',
5382     name => 'godgiven item',
5383     type => 'bool'
5384     }
5385     ],
5386     [
5387     'msg',
5388     {
5389     desc => 'This text describes the weapons\'s "story". Every decent artifact weapon should have such a description.',
5390     end => 'endmsg',
5391     name => 'description',
5392     type => 'text'
5393     }
5394     ]
5395     ],
5396 root 1.3 desc => 'Schooting 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.',
5397 root 1.5 name => 'Shooting Weapon',
5398 root 1.4 section => [
5399     [
5400     'stats',
5401 root 1.7 [
5402     [
5403     'Str',
5404     {
5405     desc => 'The player\'s strentgh will rise/fall by the given value while wearing this shooting weapon.',
5406     name => 'strength',
5407     type => 'int'
5408     }
5409     ],
5410     [
5411     'Dex',
5412     {
5413     desc => 'The player\'s dexterity will rise/fall by the given value while wearing this shooting weapon.',
5414     name => 'dexterity',
5415     type => 'int'
5416     }
5417     ],
5418     [
5419     'Con',
5420     {
5421     desc => 'The player\'s constitution will rise/fall by the given value while wearing this shooting weapon.',
5422     name => 'constitution',
5423     type => 'int'
5424     }
5425     ],
5426     [
5427     'Int',
5428     {
5429     desc => 'The player\'s intelligence will rise/fall by the given value while wearing this shooting weapon.',
5430     name => 'intelligence',
5431     type => 'int'
5432     }
5433     ],
5434     [
5435     'Pow',
5436     {
5437     desc => 'The player\'s power will rise/fall by the given value while wearing this shooting weapon.',
5438     name => 'power',
5439     type => 'int'
5440     }
5441     ],
5442     [
5443     'Wis',
5444     {
5445     desc => 'The player\'s wisdom will rise/fall by the given value while wearing this shooting weapon.',
5446     name => 'wisdom',
5447     type => 'int'
5448     }
5449     ],
5450     [
5451     'Cha',
5452     {
5453     desc => 'The player\'s charisma will rise/fall by the given value while wearing this shooting weapon.',
5454     name => 'charisma',
5455     type => 'int'
5456     }
5457     ]
5458     ]
5459     ],
5460     [
5461     'bonus',
5462     [
5463     [
5464     'luck',
5465     {
5466     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.',
5467     name => 'luck bonus',
5468     type => 'int'
5469     }
5470     ],
5471     [
5472     'magic',
5473     {
5474     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.',
5475     name => 'magic bonus',
5476     type => 'int'
5477     }
5478     ]
5479     ]
5480     ]
5481     ],
5482     use => 'Shooting weapons should not add bonuses in general. There\'s already enough "equipment-slots" doing that: swords, rings, amulets, girdles etc. Schooting 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.'
5483     },
5484     'Shop Floor' => {
5485     attr => [
5486     [
5487     'is_floor',
5488     {
5489     type => 'fixed',
5490     value => 1
5491     }
5492     ],
5493     [
5494     'no_pick',
5495     {
5496     type => 'fixed',
5497     value => 1
5498     }
5499     ],
5500     [
5501     'no_magic',
5502     {
5503     type => 'fixed',
5504     value => 1
5505     }
5506     ],
5507     [
5508     'auto_apply',
5509 root 1.4 {
5510 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.',
5511     name => 'generate goods',
5512     type => 'bool'
5513 root 1.4 }
5514     ],
5515     [
5516 root 1.7 'randomitems',
5517     {
5518     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.',
5519     name => 'treasurelist',
5520     type => 'treasurelist'
5521     }
5522     ],
5523     [
5524     'exp',
5525     {
5526     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.',
5527     name => 'quality level',
5528     type => 'int'
5529     }
5530     ],
5531     [
5532     'damned',
5533 root 1.4 {
5534 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.)',
5535     name => 'no prayers',
5536     type => 'bool'
5537 root 1.4 }
5538     ]
5539     ],
5540 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).',
5541     ignore => [
5542     $IGNORE_LIST{non_pickable}
5543     ],
5544 root 1.5 name => 'Shop Floor',
5545 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.'
5546     },
5547     'Shop Mat' => {
5548 root 1.7 attr => [
5549     [
5550     'no_pick',
5551     {
5552     type => 'fixed',
5553     value => 1
5554     }
5555     ],
5556     [
5557 root 1.14 'move_on',
5558 root 1.7 {
5559 root 1.14 desc => 'Which movement types automatically (as opposed to manually) activate this object.',
5560     name => 'movement type',
5561     type => 'bitmask',
5562     value => $BITMASK{movement_type}
5563 root 1.7 }
5564     ]
5565     ],
5566 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).',
5567     ignore => [
5568     $IGNORE_LIST{non_pickable}
5569     ],
5570 root 1.5 name => 'Shop Mat',
5571 root 1.3 use => 'As stated above, always place TWO shop mats into your shop. Not more and not less than that.'
5572     },
5573     'Sign & MagicMouth' => {
5574 root 1.7 attr => [
5575     [
5576     'connected',
5577     {
5578     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.',
5579     name => 'connection',
5580     type => 'int'
5581     }
5582     ],
5583     [
5584 root 1.14 'move_on',
5585 root 1.7 {
5586 root 1.14 desc => 'Which movement types automatically (as opposed to manually) activate this object.',
5587     name => 'movement type',
5588     type => 'bitmask',
5589     value => $BITMASK{movement_type}
5590 root 1.7 }
5591     ],
5592     [
5593     'food',
5594     {
5595     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).',
5596     name => 'counter',
5597     type => 'int'
5598     }
5599     ],
5600     [
5601     'msg',
5602     {
5603     desc => 'This text will be displayed to the player.',
5604     end => 'endmsg',
5605     name => 'message',
5606     type => 'text'
5607     }
5608     ]
5609     ],
5610     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).',
5611     ignore => [
5612     $IGNORE_LIST{non_pickable}
5613     ],
5614     name => 'Sign & MagicMouth',
5615     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.'
5616     },
5617     Skill => {
5618     attr => [
5619     [
5620     'invisible',
5621     {
5622     type => 'fixed',
5623     value => 1
5624     }
5625     ],
5626     [
5627     'no_drop',
5628     {
5629     type => 'fixed',
5630     value => 1
5631     }
5632     ],
5633     [
5634     'skill',
5635     {
5636     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.',
5637     name => 'skill name',
5638     type => 'string'
5639     }
5640     ],
5641     [
5642     'expmul',
5643     {
5644     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.',
5645     name => 'exp multiplier',
5646     type => 'float'
5647     }
5648     ],
5649     [
5650     'subtype',
5651     {
5652     desc => 'The <skill type> defines the base functionality of the skill. Skill types are hardcoded in the Crossfire server. It isn\'t hard to create new skill types, but it requires a bit of server-coding.',
5653     name => 'skill type',
5654     type => 'list',
5655     value => $LIST{skill_type}
5656     }
5657     ],
5658     [
5659     'level',
5660     {
5661     name => 'level',
5662     type => 'int'
5663     }
5664     ],
5665     [
5666     'exp',
5667     {
5668     name => 'experience',
5669     type => 'int'
5670     }
5671     ],
5672     [
5673     'can_use_skill',
5674     {
5675     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.',
5676     name => 'is native skill',
5677     type => 'bool'
5678     }
5679     ]
5680 root 1.3 ],
5681     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.',
5682     ignore => [
5683     $IGNORE_LIST{system_object}
5684     ],
5685 root 1.5 name => 'Skill',
5686 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>'
5687     },
5688     'Skill Scroll' => {
5689 root 1.7 attr => [
5690     [
5691     'race',
5692     {
5693     type => 'fixed',
5694     value => 'scrolls'
5695     }
5696     ],
5697     [
5698     'skill',
5699     {
5700     desc => 'The <skill name> matches the skill object that can be learned from this scroll.',
5701     name => 'skill name',
5702     type => 'string'
5703     }
5704     ]
5705     ],
5706 root 1.3 desc => 'By reading a skill scroll, a player has a chance to learn the contained skill.',
5707 root 1.5 name => 'Skill Scroll',
5708 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.'
5709     },
5710     'Special Key' => {
5711 root 1.7 attr => [
5712     [
5713     'slaying',
5714     {
5715     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.',
5716     name => 'key string',
5717     type => 'string'
5718     }
5719     ],
5720     [
5721     'material',
5722     {
5723     desc => 'For Special Keys, material should always be unset or set to Adamantite. This prevents the key from getting burned or otherwise destroyed.',
5724     name => 'material',
5725     type => 'bitmask',
5726     value => $BITMASK{material}
5727     }
5728     ],
5729     [
5730     'unique',
5731     {
5732     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.',
5733     name => 'unique item',
5734     type => 'bool'
5735     }
5736     ],
5737     [
5738     'startequip',
5739     {
5740     desc => 'A godgiven item vanishes as soon as the player drops it to the ground.',
5741     name => 'godgiven item',
5742     type => 'bool'
5743     }
5744     ],
5745     [
5746     'msg',
5747     {
5748     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.',
5749     end => 'endmsg',
5750     name => 'description',
5751     type => 'text'
5752     }
5753     ]
5754     ],
5755 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.',
5756     ignore => [
5757     'material'
5758     ],
5759 root 1.5 name => 'Special Key',
5760 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".'
5761     },
5762     Spell => {
5763 root 1.7 attr => [
5764     [
5765     'no_drop',
5766     {
5767     type => 'fixed',
5768     value => 1
5769     }
5770     ],
5771     [
5772     'invisible',
5773     {
5774     type => 'fixed',
5775     value => 1
5776     }
5777     ],
5778     [
5779     'skill',
5780     {
5781     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.',
5782     name => 'skill name',
5783     type => 'string'
5784     }
5785     ],
5786     [
5787     'subtype',
5788     {
5789     desc => 'The <spell type> defines the basic type of spell. Some of these types are of a more generic nature than others.',
5790     name => 'spell type',
5791     type => 'list',
5792     value => $LIST{spell_type}
5793     }
5794     ],
5795     [
5796     'level',
5797     {
5798     name => 'spell level',
5799     type => 'int'
5800     }
5801     ],
5802     [
5803     'casting_time',
5804     {
5805     name => 'casting time',
5806     type => 'int'
5807     }
5808     ],
5809     [
5810     'duration',
5811     {
5812     name => 'duration',
5813     type => 'int'
5814     }
5815     ],
5816     [
5817     'other_arch',
5818     {
5819     name => 'create object',
5820     type => 'string'
5821     }
5822     ],
5823     [
5824     'sp',
5825     {
5826     name => 'cost spellpoints',
5827     type => 'int'
5828     }
5829     ],
5830     [
5831     'grace',
5832     {
5833     name => 'cost grace',
5834     type => 'int'
5835     }
5836     ],
5837     [
5838     'maxsp',
5839     {
5840     name => 'double cost per level',
5841     type => 'int'
5842     }
5843     ]
5844     ],
5845 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.',
5846     ignore => [
5847     $IGNORE_LIST{system_object}
5848     ],
5849 root 1.5 name => 'Spell',
5850 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.'
5851     },
5852     Spellbook => {
5853 root 1.7 attr => [
5854     [
5855     'skill',
5856     {
5857     type => 'fixed',
5858     value => 'literacy'
5859     }
5860     ],
5861     [
5862     'randomitems',
5863     {
5864     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.',
5865     name => 'treasurelist',
5866     type => 'treasurelist'
5867     }
5868     ],
5869     [
5870     'startequip',
5871     {
5872     desc => 'A godgiven item vanishes as soon as the player drops it to the ground.',
5873     name => 'godgiven item',
5874     type => 'bool'
5875     }
5876     ],
5877     [
5878     'msg',
5879     {
5880     desc => 'This text may contain a nice description of the spellbook\'s cover or something.',
5881     end => 'endmsg',
5882     name => 'description',
5883     type => 'text'
5884     }
5885     ]
5886     ],
5887 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.',
5888 root 1.5 name => 'Spellbook',
5889 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.'
5890     },
5891     Spinner => {
5892 root 1.7 attr => [
5893     [
5894     'sp',
5895     {
5896     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.',
5897     name => 'direction number',
5898     type => 'int'
5899     }
5900     ],
5901     [
5902 root 1.14 'move_on',
5903 root 1.7 {
5904 root 1.14 desc => 'Which movement types automatically (as opposed to manually) activate this object.',
5905     name => 'movement type',
5906     type => 'bitmask',
5907     value => $BITMASK{movement_type}
5908 root 1.7 }
5909     ]
5910     ],
5911 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.',
5912     ignore => [
5913     $IGNORE_LIST{non_pickable}
5914     ],
5915 root 1.5 name => 'Spinner',
5916 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.'
5917     },
5918     Swamp => {
5919 root 1.7 attr => [
5920     [
5921     'is_floor',
5922     {
5923     type => 'fixed',
5924     value => 1
5925     }
5926     ],
5927     [
5928     'is_wooded',
5929     {
5930     type => 'fixed',
5931     value => 1
5932     }
5933     ],
5934     [
5935     'speed',
5936     {
5937     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.',
5938     name => 'drowning speed',
5939     type => 'float'
5940     }
5941     ],
5942     [
5943 root 1.14 'move_on',
5944     {
5945     desc => 'Which movement types automatically (as opposed to manually) activate this object.',
5946     name => 'movement type',
5947     type => 'bitmask',
5948     value => $BITMASK{movement_type}
5949     }
5950     ],
5951     [
5952     'move_block',
5953 root 1.7 {
5954 root 1.14 desc => 'Objects using these movement types cannot move over this space.',
5955     name => 'blocked movement',
5956     type => 'bitmask',
5957     value => $BITMASK{movement_type}
5958     }
5959     ],
5960     [
5961     'move_allow',
5962     {
5963     desc => 'Objects using these movement types are allowed to move over this space. Takes precedence over \'blocked movements\'.',
5964     name => 'allowed movement',
5965     type => 'bitmask',
5966     value => $BITMASK{movement_type}
5967     }
5968     ],
5969     [
5970     'move_slow',
5971     {
5972     desc => 'The types of movement that should by slowed down by the \'slow movement penalty\'.',
5973     name => 'slowed movement',
5974     type => 'bitmask',
5975     value => $BITMASK{movement_type}
5976     }
5977     ],
5978     [
5979     'move_slow_penalty',
5980     {
5981     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)',
5982     name => 'slow movement penalty',
5983 root 1.7 type => 'int'
5984     }
5985     ],
5986     [
5987     'no_magic',
5988     {
5989     desc => 'If enabled, it is impossible for players to use (wizard-) spells on that spot.',
5990     name => 'no spells',
5991     type => 'bool'
5992     }
5993     ],
5994     [
5995     'damned',
5996     {
5997     desc => 'If enabled, it is impossible for players to use prayers on that spot. It also prevents players from saving.',
5998     name => 'no prayers',
5999     type => 'bool'
6000     }
6001     ]
6002     ],
6003 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.',
6004     ignore => [
6005     $IGNORE_LIST{non_pickable}
6006 root 1.5 ],
6007     name => 'Swamp'
6008 root 1.3 },
6009     Teleporter => {
6010 root 1.7 attr => [
6011     [
6012     'slaying',
6013     {
6014     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.',
6015     name => 'exit path',
6016     type => 'string'
6017     }
6018     ],
6019     [
6020     'hp',
6021     {
6022     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.',
6023     name => 'destination X',
6024     type => 'int'
6025     }
6026     ],
6027     [
6028     'sp',
6029     {
6030     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.',
6031     name => 'destination Y',
6032     type => 'int'
6033     }
6034     ],
6035     [
6036     'connected',
6037     {
6038     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.',
6039     name => 'connection',
6040     type => 'int'
6041     }
6042     ],
6043     [
6044     'speed',
6045     {
6046     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!',
6047     name => 'activation speed',
6048     type => 'float'
6049     }
6050     ]
6051     ],
6052 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.',
6053     ignore => [
6054     $IGNORE_LIST{non_pickable}
6055     ],
6056 root 1.5 name => 'Teleporter',
6057 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.'
6058     },
6059 root 1.8 'Timed Gate' => {
6060     attr => [
6061     [
6062     'no_pick',
6063     {
6064     type => 'fixed',
6065     value => 1
6066     }
6067     ],
6068     [
6069     'connected',
6070     {
6071     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.',
6072     name => 'connection',
6073     type => 'int'
6074     }
6075     ],
6076     [
6077     'wc',
6078     {
6079     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.',
6080     name => 'position state',
6081     type => 'int'
6082     }
6083     ],
6084     [
6085 root 1.14 'move_block',
6086     {
6087     desc => 'Objects using these movement types cannot move over this space.',
6088     name => 'blocked movement',
6089     type => 'bitmask',
6090     value => $BITMASK{movement_type}
6091     }
6092     ],
6093     [
6094     'move_allow',
6095     {
6096     desc => 'Objects using these movement types are allowed to move over this space. Takes precedence over \'blocked movements\'.',
6097     name => 'allowed movement',
6098     type => 'bitmask',
6099     value => $BITMASK{movement_type}
6100     }
6101     ],
6102     [
6103     'move_slow',
6104 root 1.8 {
6105 root 1.14 desc => 'The types of movement that should by slowed down by the \'slow movement penalty\'.',
6106     name => 'slowed movement',
6107     type => 'bitmask',
6108     value => $BITMASK{movement_type}
6109     }
6110     ],
6111     [
6112     'move_slow_penalty',
6113     {
6114     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)',
6115     name => 'slow movement penalty',
6116     type => 'int'
6117 root 1.8 }
6118     ],
6119     [
6120     'no_magic',
6121     {
6122     desc => 'Restricting the use of spells to pass this gate. This has an effect only if <block view> is disabled.',
6123     name => 'restrict spells',
6124     type => 'bool'
6125     }
6126     ],
6127     [
6128     'damned',
6129     {
6130     desc => 'Restricting the use of prayers to pass this door. This has an effect only if <block view> is disabled.',
6131     name => 'restrict prayers',
6132     type => 'bool'
6133     }
6134     ],
6135     [
6136     'hp',
6137     {
6138     desc => 'Defines the duration the gate remains closed. This only takes effect if the gate is not connected.',
6139     name => 'open duration',
6140     type => 'int'
6141     }
6142     ]
6143     ],
6144     desc => 'Gates play an important role in Crossfire. 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.',
6145     ignore => [
6146     $IGNORE_LIST{non_pickable}
6147     ],
6148     name => 'Timed Gate',
6149     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".'
6150     },
6151 root 1.3 Trap => {
6152 root 1.7 attr => [
6153     [
6154     'no_pick',
6155     {
6156     type => 'fixed',
6157     value => 1
6158     }
6159     ],
6160     [
6161 root 1.14 'move_on',
6162 root 1.7 {
6163 root 1.14 desc => 'Which movement types automatically (as opposed to manually) activate this object.',
6164     name => 'movement type',
6165     type => 'bitmask',
6166     value => $BITMASK{movement_type}
6167 root 1.7 }
6168     ],
6169     [
6170     'level',
6171     {
6172     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.',
6173     name => 'trap level',
6174     type => 'int'
6175     }
6176     ],
6177     [
6178     'Cha',
6179     {
6180     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.',
6181     name => 'visibility',
6182     type => 'int'
6183     }
6184     ],
6185     [
6186     'hp',
6187     {
6188     desc => 'The trap will detonate <number of charges> times before disappearing.',
6189     name => 'number of charges',
6190     type => 'int'
6191     }
6192     ],
6193     [
6194     'dam',
6195     {
6196     desc => '<direct damage> specifies how much damage is done by the trap. This should be set in reasonable relation to the trap\'s level.',
6197     name => 'direct damage',
6198     type => 'int'
6199     }
6200     ],
6201     [
6202     'attacktype',
6203     {
6204     desc => 'This attribute defines what attacktype to use for direct damage when the trap detonates.',
6205     name => 'attacktype',
6206     type => 'bitmask',
6207     value => $BITMASK{attacktype}
6208     }
6209     ],
6210     [
6211     'connected',
6212     {
6213     desc => 'When the trap is detonated, all objects with the same connection value get activated.',
6214     name => 'connection',
6215     type => 'int'
6216     }
6217     ],
6218     [
6219     'msg',
6220     {
6221     desc => 'When the trap detonates, this text is displayed to the victim. For especially powerful or complex traps, create an appropriate and thrilling description. ;)',
6222     end => 'endmsg',
6223     name => 'detonation text',
6224     type => 'text'
6225     }
6226     ]
6227     ],
6228 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.',
6229     ignore => [
6230     'no_pick',
6231     'title',
6232     'name_pl',
6233     'weight',
6234     'value',
6235     'material',
6236     'unpaid'
6237     ],
6238 root 1.5 name => 'Trap',
6239 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.'
6240     },
6241     Trapdoor => {
6242 root 1.7 attr => [
6243     [
6244     'no_pick',
6245     {
6246     type => 'fixed',
6247     value => 1
6248     }
6249     ],
6250     [
6251 root 1.14 'move_on',
6252 root 1.7 {
6253 root 1.14 desc => 'Which movement types automatically (as opposed to manually) activate this object.',
6254     name => 'movement type',
6255     type => 'bitmask',
6256     value => $BITMASK{movement_type}
6257 root 1.7 }
6258     ],
6259     [
6260     'weight',
6261     {
6262     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.',
6263     name => 'hold weight',
6264     type => 'int'
6265     }
6266     ],
6267     [
6268     'hp',
6269     {
6270     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!',
6271     name => 'destination X',
6272     type => 'int'
6273     }
6274     ],
6275     [
6276     'sp',
6277     {
6278     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!',
6279     name => 'destination Y',
6280     type => 'int'
6281     }
6282     ]
6283     ],
6284 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.',
6285     ignore => [
6286     $IGNORE_LIST{non_pickable}
6287     ],
6288 root 1.5 name => 'Trapdoor',
6289 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.'
6290     },
6291     Treasure => {
6292 root 1.7 attr => [
6293     [
6294     'randomitems',
6295     {
6296     desc => 'This entry determines what kind of treasure will appear. Look into /crossfire/share/crossfire/treasures for details about existing treasurelists.',
6297     name => 'treasurelist',
6298     type => 'treasurelist'
6299     }
6300     ],
6301     [
6302     'auto_apply',
6303     {
6304     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.',
6305     name => 'auto-generate',
6306     type => 'bool'
6307     }
6308     ],
6309     [
6310     'hp',
6311     {
6312     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.',
6313     name => 'create number',
6314     type => 'int'
6315     }
6316     ],
6317     [
6318     'exp',
6319     {
6320     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).',
6321     name => 'quality level',
6322     type => 'int'
6323     }
6324     ]
6325     ],
6326 root 1.3 desc => 'A treasure-object turns into certain randomitems when the map is loaded into the game.',
6327     ignore => [
6328     'nrof',
6329     'title',
6330     'name_pl',
6331     'weight',
6332     'value',
6333     'material'
6334     ],
6335 root 1.5 name => 'Treasure',
6336 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.'
6337     },
6338     'Trigger Marker' => {
6339 root 1.7 attr => [
6340     [
6341     'no_pick',
6342     {
6343     type => 'fixed',
6344     value => 1
6345     }
6346     ],
6347     [
6348     'slaying',
6349     {
6350     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.',
6351     name => 'key string',
6352     type => 'string'
6353     }
6354     ],
6355     [
6356     'connected',
6357     {
6358     desc => 'Unlike a regular marker this is the connection that triggers this marker to activate.',
6359     name => 'connection',
6360     type => 'int'
6361     }
6362     ],
6363     [
6364     'food',
6365     {
6366     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.',
6367     name => 'mark duration',
6368     type => 'int'
6369     }
6370     ],
6371     [
6372     'name',
6373     {
6374     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.',
6375     name => 'delete mark',
6376     type => 'string'
6377     }
6378     ],
6379     [
6380     'msg',
6381     {
6382     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.',
6383     end => 'endmsg',
6384     name => 'marking message',
6385     type => 'text'
6386     }
6387     ]
6388     ],
6389 root 1.3 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. <br><br> Note that the player has no possibility to "see" his own marks, except by the effect that they cause on the maps.',
6390     ignore => [
6391     $IGNORE_LIST{system_object}
6392     ],
6393 root 1.5 name => 'Trigger Marker',
6394 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.'
6395     },
6396     Wall => {
6397 root 1.7 attr => [
6398     [
6399 root 1.14 'move_block',
6400     {
6401     desc => 'Objects using these movement types cannot move over this space.',
6402     name => 'blocked movement',
6403     type => 'bitmask',
6404     value => $BITMASK{movement_type}
6405     }
6406     ],
6407     [
6408     'move_allow',
6409     {
6410     desc => 'Objects using these movement types are allowed to move over this space. Takes precedence over \'blocked movements\'.',
6411     name => 'allowed movement',
6412     type => 'bitmask',
6413     value => $BITMASK{movement_type}
6414     }
6415     ],
6416     [
6417     'move_slow',
6418 root 1.7 {
6419 root 1.14 desc => 'The types of movement that should by slowed down by the \'slow movement penalty\'.',
6420     name => 'slowed movement',
6421     type => 'bitmask',
6422     value => $BITMASK{movement_type}
6423     }
6424     ],
6425     [
6426     'move_slow_penalty',
6427     {
6428     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)',
6429     name => 'slow movement penalty',
6430     type => 'int'
6431 root 1.7 }
6432     ],
6433     [
6434     'can_roll',
6435     {
6436     desc => 'If set, the object is able to "roll", so it can be pushed around. This setting is used for boulders and barrels.',
6437     name => 'moveable',
6438     type => 'bool'
6439     }
6440     ],
6441     [
6442     'no_magic',
6443     {
6444     desc => 'This takes effect only with <blocksview> disabled. Restricting the use of spells to pass this wall.',
6445     name => 'restrict spells',
6446     type => 'bool'
6447     }
6448     ],
6449     [
6450     'damned',
6451     {
6452     desc => 'This takes effect only with <blocksview> disabled. Restricting the use of spells to pass this wall.',
6453     name => 'restrict prayers',
6454     type => 'bool'
6455     }
6456     ]
6457     ],
6458 root 1.3 desc => 'Walls usually block passage and sight.',
6459     ignore => [
6460     'nrof',
6461     'title',
6462     'name_pl',
6463     'value',
6464     'unpaid'
6465     ],
6466 root 1.5 name => 'Wall',
6467 root 1.3 required => {
6468     alive => 0,
6469     is_floor => 0,
6470 root 1.14 move_block => 255
6471 root 1.3 }
6472     },
6473     'Wand & Staff' => {
6474 root 1.7 attr => [
6475     [
6476     'sp',
6477     {
6478     desc => 'The <spell> specifies the contained spell.',
6479     name => 'spell',
6480     type => 'spell'
6481     }
6482     ],
6483     [
6484     'level',
6485     {
6486     desc => 'The <casting level> of the wand determines it\'s power. An average level for wands in shops is about 10.',
6487     name => 'casting level',
6488     type => 'int'
6489     }
6490     ],
6491     [
6492     'food',
6493     {
6494     desc => 'The wand can be used <number of charges> times before it is used up. It can be recharged with scrolls of charging.',
6495     name => 'number of charges',
6496     type => 'int'
6497     }
6498     ],
6499     [
6500     'startequip',
6501     {
6502     desc => 'A godgiven item vanishes as soon as the player drops it to the ground.',
6503     name => 'godgiven item',
6504     type => 'bool'
6505     }
6506     ],
6507     [
6508     'msg',
6509     {
6510     desc => 'This text may contain a description of the wand.',
6511     end => 'endmsg',
6512     name => 'description',
6513     type => 'text'
6514     }
6515     ]
6516     ],
6517 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.',
6518 root 1.5 name => 'Wand & Staff',
6519 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.'
6520 root 1.3 },
6521     'Weak Wall' => {
6522 root 1.7 attr => [
6523     [
6524     'alive',
6525     {
6526     type => 'fixed',
6527     value => 1
6528     }
6529     ],
6530     [
6531     'no_pick',
6532     {
6533     type => 'fixed',
6534     value => 1
6535     }
6536     ],
6537     [
6538     'tear_down',
6539     {
6540     type => 'fixed',
6541     value => 1
6542     }
6543     ],
6544     [
6545     'race',
6546     {
6547     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.',
6548     name => 'race',
6549     type => 'string'
6550     }
6551     ],
6552     [
6553     'level',
6554     {
6555     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.',
6556     name => 'level',
6557     type => 'int'
6558     }
6559     ],
6560     [
6561     'hp',
6562     {
6563     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.',
6564     name => 'health points',
6565     type => 'int'
6566     }
6567     ],
6568     [
6569     'maxhp',
6570     {
6571     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.',
6572     name => 'max health',
6573     type => 'int'
6574     }
6575     ],
6576     [
6577     'ac',
6578     {
6579     desc => 'Weak walls of high <armour class> are less likely to get hit. <armour class> can be considered the "counterpiece" to <weapon class>.',
6580     name => 'armour class',
6581     type => 'int'
6582     }
6583     ]
6584     ],
6585 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.',
6586     ignore => [
6587     $IGNORE_LIST{non_pickable}
6588     ],
6589 root 1.5 name => 'Weak Wall',
6590 root 1.3 required => {
6591     alive => 1,
6592     is_floor => 0,
6593     tear_down => 1
6594     },
6595 root 1.4 section => [
6596     [
6597     'resistance',
6598 root 1.7 [
6599     [
6600     'resist_physical',
6601     {
6602     name => 'resist physical %',
6603     type => 'int'
6604     }
6605     ],
6606     [
6607     'resist_magic',
6608     {
6609     name => 'resist magic %',
6610     type => 'int'
6611     }
6612     ],
6613     [
6614     'resist_fire',
6615     {
6616     name => 'resist fire %',
6617     type => 'int'
6618     }
6619     ],
6620     [
6621     'resist_electricity',
6622     {
6623     name => 'resist electricity %',
6624     type => 'int'
6625     }
6626     ],
6627     [
6628     'resist_cold',
6629     {
6630     name => 'resist cold %',
6631     type => 'int'
6632     }
6633     ],
6634     [
6635     'resist_confusion',
6636     {
6637     name => 'resist confusion %',
6638     type => 'int'
6639     }
6640     ],
6641     [
6642     'resist_acid',
6643     {
6644     name => 'resist acid %',
6645     type => 'int'
6646     }
6647     ],
6648     [
6649     'resist_drain',
6650     {
6651     name => 'resist draining %',
6652     type => 'int'
6653     }
6654     ],
6655     [
6656     'resist_weaponmagic',
6657     {
6658     name => 'resist weaponmagic %',
6659     type => 'int'
6660     }
6661     ],
6662     [
6663     'resist_ghosthit',
6664     {
6665     name => 'resist ghosthit %',
6666     type => 'int'
6667     }
6668     ],
6669     [
6670     'resist_poison',
6671     {
6672     name => 'resist poison %',
6673     type => 'int'
6674     }
6675     ],
6676     [
6677     'resist_slow',
6678     {
6679     name => 'resist slow %',
6680     type => 'int'
6681     }
6682     ],
6683     [
6684     'resist_paralyze',
6685     {
6686     name => 'resist paralyze %',
6687     type => 'int'
6688     }
6689     ],
6690     [
6691     'resist_fear',
6692     {
6693     name => 'resist fear %',
6694     type => 'int'
6695     }
6696     ],
6697     [
6698     'resist_deplete',
6699     {
6700     name => 'resist depletion %',
6701     type => 'int'
6702     }
6703     ],
6704     [
6705     'resist_turn_undead',
6706     {
6707     name => 'resist turn undead %',
6708     type => 'int'
6709     }
6710     ],
6711     [
6712     'resist_death',
6713     {
6714     name => 'resist death-attack %',
6715     type => 'int'
6716     }
6717     ],
6718     [
6719     'resist_chaos',
6720     {
6721     name => 'resist chaos %',
6722     type => 'int'
6723     }
6724     ],
6725     [
6726     'resist_blind',
6727     {
6728     name => 'resist blinding %',
6729     type => 'int'
6730     }
6731     ],
6732     [
6733     'resist_holyword',
6734     {
6735     name => 'resist holy power %',
6736     type => 'int'
6737     }
6738     ],
6739     [
6740     'resist_godpower',
6741     {
6742     name => 'resist godpower %',
6743     type => 'int'
6744     }
6745     ]
6746     ]
6747 root 1.4 ]
6748     ],
6749 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.'
6750     },
6751     Weapon => {
6752 root 1.7 attr => [
6753     [
6754     'attacktype',
6755     {
6756     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.',
6757     name => 'attacktype',
6758     type => 'bitmask',
6759     value => $BITMASK{attacktype}
6760     }
6761     ],
6762     [
6763     'weapontype',
6764     {
6765     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.',
6766     name => 'weapontype',
6767     type => 'list',
6768     value => $LIST{weapon_type}
6769     }
6770     ],
6771     [
6772     'skill',
6773     {
6774     desc => 'Matching <skill name> of the skill that is required to use this weapon.',
6775     name => 'skill name',
6776     type => 'string'
6777     }
6778     ],
6779     [
6780     'dam',
6781     {
6782     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.',
6783     name => 'damage',
6784     type => 'int'
6785     }
6786     ],
6787     [
6788     'slaying',
6789     {
6790     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.',
6791     name => 'slaying race',
6792     type => 'string'
6793     }
6794     ],
6795     [
6796     'last_sp',
6797     {
6798     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.',
6799     name => 'weapon speed',
6800     type => 'int'
6801     }
6802     ],
6803     [
6804     'wc',
6805     {
6806     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.',
6807     name => 'weapon class',
6808     type => 'int'
6809     }
6810     ],
6811     [
6812     'magic',
6813     {
6814     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.',
6815     name => 'magic bonus',
6816     type => 'int'
6817     }
6818     ],
6819     [
6820     'item_power',
6821     {
6822     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 CF server will calculate a provisional value at runtime, but this is never going to be an accurate measurement of <item power>.',
6823     name => 'item power',
6824     type => 'int'
6825     }
6826     ],
6827     [
6828     'damned',
6829     {
6830     desc => 'A damned weapon cannot be unwielded unless the curse is removed. Removing damnations is a tick harder than removing curses.',
6831     name => 'damnation',
6832     type => 'bool'
6833     }
6834     ],
6835     [
6836     'cursed',
6837     {
6838     desc => 'A cursed weapon cannot be unwielded unless the curse is removed.',
6839     name => 'curse',
6840     type => 'bool'
6841     }
6842     ],
6843     [
6844     'lifesave',
6845     {
6846 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!',
6847 root 1.7 name => 'save life',
6848     type => 'bool'
6849     }
6850     ],
6851     [
6852     'unique',
6853     {
6854     desc => 'Unique items exist only one time on a server. If the item is taken, lost or destroyed - it\'s gone for good.',
6855     name => 'unique item',
6856     type => 'bool'
6857     }
6858     ],
6859     [
6860     'startequip',
6861     {
6862     desc => 'A godgiven item vanishes as soon as the player drops it to the ground.',
6863     name => 'godgiven item',
6864     type => 'bool'
6865     }
6866     ],
6867     [
6868     'msg',
6869     {
6870     desc => 'This text describes the weapons\'s "story". Every decent artifact weapon should have such a description.',
6871     end => 'endmsg',
6872     name => 'description',
6873     type => 'text'
6874     }
6875     ]
6876     ],
6877 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.',
6878 root 1.5 name => 'Weapon',
6879 root 1.4 section => [
6880     [
6881     'resistance',
6882 root 1.7 [
6883     [
6884     'resist_physical',
6885     {
6886     desc => 'This adds physical resistance to the weapon (= armour value). The number is a percent-value in the range 0-100. Treat this with CARE. Look at other maps and what they require to do for getting this-and-that artifact.',
6887     name => 'resist physical %',
6888     type => 'int'
6889     }
6890     ],
6891     [
6892     'resist_magic',
6893     {
6894     desc => 'This adds magic resistance to the weapon. The number is a percent-value in the range 0-100. Treat this with CARE. Look at other maps and what they require to do for getting this-and-that artifact.',
6895     name => 'resist magic %',
6896     type => 'int'
6897     }
6898     ],
6899     [
6900     'resist_fire',
6901     {
6902     desc => 'This adds fire resistance to the weapon. The number is a percent-value in the range 0-100. Treat this with CARE. Look at other maps and what they require to do for getting this-and-that artifact.',
6903     name => 'resist fire %',
6904     type => 'int'
6905     }
6906     ],
6907     [
6908     'resist_electricity',
6909     {
6910     desc => 'This adds electricity resistance to the weapon. The number is a percent-value in the range 0-100. Treat this with CARE. Look at other maps and what they require to do for getting this-and-that artifact.',
6911     name => 'resist electricity %',
6912     type => 'int'
6913     }
6914     ],
6915     [
6916     'resist_cold',
6917     {
6918     desc => 'This adds fire resistance to the weapon. The number is a percent-value in the range 0-100. Treat this with CARE. Look at other maps and what they require to do for getting this-and-that artifact.',
6919     name => 'resist cold %',
6920     type => 'int'
6921     }
6922     ],
6923     [
6924     'resist_confusion',
6925     {
6926     desc => 'This adds confusion resistance to the weapon. The number is a percent-value in the range 0-100. Confusion resistance is not very effective unless the value comes close to 100 (= perfect immunity).',
6927     name => 'resist confusion %',
6928     type => 'int'
6929     }
6930     ],
6931     [
6932     'resist_acid',
6933     {
6934     desc => 'This adds acid resistance to the weapon. The number is a percent-value in the range 0-100. Treat this with CARE. Look at other maps and what they require to do for getting this-and-that artifact.',
6935     name => 'resist acid %',
6936     type => 'int'
6937     }
6938     ],
6939     [
6940     'resist_drain',
6941     {
6942     desc => 'This adds draining resistance to the weapon. The number is a percent-value in the range 0-100. Draining resistance is little effective unless the value is 100 (= perfect immunity).',
6943     name => 'resist draining %',
6944     type => 'int'
6945     }
6946     ],
6947     [
6948     'resist_weaponmagic',
6949     {
6950     desc => 'This adds weaponmagic resistance to the weapon. The number is a percent-value in the range 0-100. Weaponmagic resistance generally should not exist on equipment at all. Spells/Monsters doing weaponmagic damage (e.g. comet spell) are not meant to be easily resisted.',
6951     name => 'resist weaponmagic %',
6952     type => 'int'
6953     }
6954     ],
6955     [
6956     'resist_ghosthit',
6957     {
6958     desc => 'This adds ghosthit resistance to the weapon. The number is a percent-value in the range 0-100. Treat this with CARE. Look at other maps and what they require to do for getting this-and-that artifact.',
6959     name => 'resist ghosthit %',
6960     type => 'int'
6961     }
6962     ],
6963     [
6964     'resist_poison',
6965     {
6966     desc => 'This adds poison resistance to the weapon. The number is a percent-value in the range 0-100. Treat this with CARE. Look at other maps and what they require to do for getting this-and-that artifact.',
6967     name => 'resist poison %',
6968     type => 'int'
6969     }
6970     ],
6971     [
6972     'resist_slow',
6973     {
6974     desc => 'This adds fear resistance to the weapon. The number is a percent-value in the range 0-100. Resistance to fear is pretty useless.',
6975     name => 'resist slow %',
6976     type => 'int'
6977     }
6978     ],
6979     [
6980     'resist_paralyze',
6981     {
6982     desc => 'This adds paralyze resistance to the weapon. The number is a percent-value in the range 0-100. Paralyze resistance is little effective unless the value is 100 (= perfect immunity).',
6983     name => 'resist paralyze %',
6984     type => 'int'
6985     }
6986     ],
6987     [
6988     'resist_fear',
6989     {
6990     desc => 'This adds fear resistance to the weapon. The number is a percent-value in the range 0-100. Resistance to fear is pretty useless.',
6991     name => 'resist fear %',
6992     type => 'int'
6993     }
6994     ],
6995     [
6996     'resist_deplete',
6997     {
6998     desc => 'This adds depletion resistance to the weapon. The number is a percent-value in the range 0-100. Depletion resistance is little effective unless the value is 100 (= perfect immunity).',
6999     name => 'resist depletion %',
7000     type => 'int'
7001     }
7002     ],
7003     [
7004     'resist_death',
7005     {
7006     desc => 'This adds death-attack resistance to the weapon. The number is a percent-value in the range 0-100. Death-attack resistance is little effective unless the value is 100 (= perfect immunity). Generally, resistance to death-attack is not supposed to be available to players!',
7007     name => 'resist death-attack %',
7008     type => 'int'
7009     }
7010     ],
7011     [
7012     'resist_chaos',
7013     {
7014     desc => 'This adds chaos resistance to the weapon. The number is a percent-value in the range 0-100. Treat this with CARE. Look at other maps and what they require to do for getting this-and-that artifact. Note that chaos is not a stand-alone attacktype. Chaos "contains" a combination of other attacktypes.',
7015     name => 'resist chaos %',
7016     type => 'int'
7017     }
7018     ],
7019     [
7020     'resist_blind',
7021     {
7022     desc => 'This adds blinding resistance to the weapon. The number is a percent-value in the range 0-100. Treat this with CARE. Look at other maps and what they require to do for getting this-and-that artifact.',
7023     name => 'resist blinding %',
7024     type => 'int'
7025     }
7026     ],
7027     [
7028     'resist_holyword',
7029     {
7030     desc => 'This adds holy power resistance to the weapon. The number is a percent-value in the range 0-100. Holy power is the attacktype that holyword-type spells use to hurt undead creatures. This kind of resistance is only reasonable for undead players (wraith or devourer cult). Generally, resistance to holy word should not be available for players.',
7031     name => 'resist holy power %',
7032     type => 'int'
7033     }
7034     ]
7035     ]
7036 root 1.4 ],
7037     [
7038     'stats',
7039 root 1.7 [
7040     [
7041     'Str',
7042     {
7043     desc => 'The player\'s strentgh will rise/fall by the given value while wearing this weapon.',
7044     name => 'strength',
7045     type => 'int'
7046     }
7047     ],
7048     [
7049     'Dex',
7050     {
7051     desc => 'The player\'s dexterity will rise/fall by the given value while wearing this weapon.',
7052     name => 'dexterity',
7053     type => 'int'
7054     }
7055     ],
7056     [
7057     'Con',
7058     {
7059     desc => 'The player\'s constitution will rise/fall by the given value while wearing this weapon.',
7060     name => 'constitution',
7061     type => 'int'
7062     }
7063     ],
7064     [
7065     'Int',
7066     {
7067     desc => 'The player\'s intelligence will rise/fall by the given value while wearing this weapon.',
7068     name => 'intelligence',
7069     type => 'int'
7070     }
7071     ],
7072     [
7073     'Pow',
7074     {
7075     desc => 'The player\'s power will rise/fall by the given value while wearing this weapon.',
7076     name => 'power',
7077     type => 'int'
7078     }
7079     ],
7080     [
7081     'Wis',
7082     {
7083     desc => 'The player\'s wisdom will rise/fall by the given value while wearing this weapon.',
7084     name => 'wisdom',
7085     type => 'int'
7086     }
7087     ],
7088     [
7089     'Cha',
7090     {
7091     desc => 'The player\'s charisma will rise/fall by the given value while wearing this weapon.',
7092     name => 'charisma',
7093     type => 'int'
7094     }
7095     ]
7096     ]
7097 root 1.4 ],
7098     [
7099     'misc',
7100 root 1.7 [
7101     [
7102     'luck',
7103     {
7104     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.',
7105     name => 'luck bonus',
7106     type => 'int'
7107     }
7108     ],
7109     [
7110     'hp',
7111     {
7112     desc => 'Positive <health regen.> bonus speeds up the player\'s healing process. Negative values slow it down.',
7113     name => 'health regen.',
7114     type => 'int'
7115     }
7116     ],
7117     [
7118     'sp',
7119     {
7120     desc => 'Positive <mana regen.> bonus speeds up the player\'s mana regeneration. Negative values slow it down.',
7121     name => 'mana regen.',
7122     type => 'int'
7123     }
7124     ],
7125     [
7126     'grace',
7127     {
7128     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!!',
7129     name => 'grace regen.',
7130     type => 'int'
7131     }
7132     ],
7133     [
7134     'food',
7135     {
7136     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.',
7137     name => 'food bonus',
7138     type => 'int'
7139     }
7140     ],
7141     [
7142     'xrays',
7143     {
7144 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.',
7145 root 1.7 name => 'xray vision',
7146     type => 'bool'
7147     }
7148     ],
7149     [
7150     'stealth',
7151     {
7152     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)',
7153     name => 'stealth',
7154     type => 'bool'
7155     }
7156     ],
7157     [
7158     'reflect_spell',
7159     {
7160     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!',
7161     name => 'reflect spells',
7162     type => 'bool'
7163     }
7164     ],
7165     [
7166     'reflect_missile',
7167     {
7168     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.',
7169     name => 'reflect missiles',
7170     type => 'bool'
7171     }
7172     ],
7173     [
7174     'path_attuned',
7175     {
7176     desc => 'Click on the <attuned paths> button to select spellpaths. The player will get attuned to the specified spellpaths while wearing this weapon.',
7177     name => 'attuned paths',
7178     type => 'bitmask',
7179     value => $BITMASK{spellpath}
7180     }
7181     ],
7182     [
7183     'path_repelled',
7184     {
7185     desc => 'Click on the <repelled paths> button to select spellpaths. The player will get repelled to the specified spellpaths while wearing this weapon.',
7186     name => 'repelled paths',
7187     type => 'bitmask',
7188     value => $BITMASK{spellpath}
7189     }
7190     ],
7191     [
7192     'path_denied',
7193     {
7194     desc => 'Click on the <denied paths> button to select spellpaths. The specified spellpaths will be denied to the player while wearing this weapon.',
7195     name => 'denied paths',
7196     type => 'bitmask',
7197     value => $BITMASK{spellpath}
7198     }
7199     ]
7200     ]
7201 root 1.4 ]
7202     ],
7203 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.'
7204 root 1.1 }
7205     );
7206    
7207 root 1.3 our @ATTR0 = (
7208     $TYPE{Floor},
7209     $TYPE{'Monster & NPC'},
7210     $TYPE{Wall},
7211     $TYPE{'Weak Wall'}
7212     );
7213    
7214     our %ATTR = (
7215     3 => $TYPE{Rod},
7216     4 => $TYPE{Treasure},
7217     5 => $TYPE{Potion},
7218     6 => $TYPE{Food},
7219     7 => $TYPE{'Poison Food'},
7220     8 => $TYPE{Book},
7221     9 => $TYPE{Clock},
7222     13 => $TYPE{Projectile},
7223     14 => $TYPE{'Shooting Weapon'},
7224     15 => $TYPE{Weapon},
7225     16 => $TYPE{'Brestplate Armour'},
7226     17 => $TYPE{Pedestal},
7227     18 => $TYPE{Altar},
7228     20 => $TYPE{'Locked Door'},
7229     21 => $TYPE{'Special Key'},
7230 root 1.9 23 => $TYPE{Door},
7231     24 => $TYPE{Key},
7232 root 1.8 26 => $TYPE{'Timed Gate'},
7233 root 1.3 27 => $TYPE{'Handle Trigger'},
7234 root 1.9 28 => $TYPE{'Monster (Grimreaper)'},
7235 root 1.3 29 => $TYPE{'Magic Ear'},
7236 root 1.9 30 => $TYPE{'Button Trigger'},
7237 root 1.3 31 => $TYPE{'Altar Trigger'},
7238     33 => $TYPE{Shield},
7239     34 => $TYPE{Helmet},
7240     35 => $TYPE{Horn},
7241     36 => $TYPE{Money},
7242 root 1.9 37 => $TYPE{'Class Changer'},
7243 root 1.3 39 => $TYPE{Amulet},
7244     40 => $TYPE{Mover},
7245     41 => $TYPE{Teleporter},
7246     42 => $TYPE{Creator},
7247     43 => $TYPE{Skill},
7248     51 => $TYPE{Detector},
7249     52 => $TYPE{'Trigger Marker'},
7250     55 => $TYPE{Marker},
7251     56 => $TYPE{'Holy Altar'},
7252     58 => $TYPE{Battleground},
7253     60 => $TYPE{Jewel},
7254     62 => $TYPE{'Magic Wall'},
7255     64 => $TYPE{'Inventory Checker'},
7256     65 => $TYPE{'Mood Floor'},
7257     66 => $TYPE{Exit},
7258     67 => $TYPE{'Floor (Encounter)'},
7259     68 => $TYPE{'Shop Floor'},
7260     69 => $TYPE{'Shop Mat'},
7261     70 => $TYPE{Ring},
7262     72 => $TYPE{Flesh},
7263     73 => $TYPE{Inorganic},
7264     83 => $TYPE{Duplicator},
7265     85 => $TYPE{Spellbook},
7266     87 => $TYPE{Cloak},
7267     88 => $TYPE{'Hazard Floor'},
7268     90 => $TYPE{Spinner},
7269     91 => $TYPE{Gate},
7270     92 => $TYPE{Button},
7271     93 => $TYPE{Handle},
7272     94 => $TYPE{Pit},
7273     95 => $TYPE{Trapdoor},
7274     98 => $TYPE{'Sign & MagicMouth'},
7275     99 => $TYPE{Boots},
7276     100 => $TYPE{Gloves},
7277     101 => $TYPE{Spell},
7278     103 => $TYPE{Converter},
7279     104 => $TYPE{Bracers},
7280     106 => $TYPE{Savebed},
7281     109 => $TYPE{'Wand & Staff'},
7282     110 => $TYPE{Ability},
7283     111 => $TYPE{Scroll},
7284     112 => $TYPE{Director},
7285     113 => $TYPE{Girdle},
7286 root 1.10 116 => $TYPE{'Event Connector'},
7287 root 1.3 122 => $TYPE{Container},
7288     130 => $TYPE{'Skill Scroll'},
7289     138 => $TYPE{Swamp},
7290     154 => $TYPE{Rune},
7291     155 => $TYPE{Trap},
7292     156 => $TYPE{'Power Crystal'},
7293 root 1.8 158 => $TYPE{Disease},
7294     163 => $TYPE{'Item Transformer'}
7295 root 1.1 );
7296    
7297 root 1.3 our %TYPENAME = (
7298     0 => '*NONE*',
7299     1 => 'PLAYER',
7300 root 1.9 2 => 'TRANSPORT',
7301 root 1.3 3 => 'ROD',
7302     4 => 'TREASURE',
7303     5 => 'POTION',
7304     6 => 'FOOD',
7305     7 => 'POISON',
7306     8 => 'BOOK',
7307     9 => 'CLOCK',
7308     12 => 'LIGHTNING',
7309     13 => 'ARROW',
7310     14 => 'BOW',
7311     15 => 'WEAPON',
7312     16 => 'ARMOUR',
7313     17 => 'PEDESTAL',
7314     18 => 'ALTAR',
7315     20 => 'LOCKED_DOOR',
7316     21 => 'SPECIAL_KEY',
7317     22 => 'MAP',
7318     23 => 'DOOR',
7319     24 => 'KEY',
7320     26 => 'TIMED_GATE',
7321     27 => 'TRIGGER',
7322     28 => 'GRIMREAPER',
7323     29 => 'MAGIC_EAR',
7324     30 => 'TRIGGER_BUTTON',
7325     31 => 'TRIGGER_ALTAR',
7326     32 => 'TRIGGER_PEDESTAL',
7327     33 => 'SHIELD',
7328     34 => 'HELMET',
7329     35 => 'HORN',
7330     36 => 'MONEY',
7331     37 => 'CLASS',
7332     38 => 'GRAVESTONE',
7333     39 => 'AMULET',
7334     40 => 'PLAYERMOVER',
7335     41 => 'TELEPORTER',
7336     42 => 'CREATOR',
7337     43 => 'SKILL',
7338     44 => 'EXPERIENCE',
7339     45 => 'EARTHWALL',
7340     46 => 'GOLEM',
7341     48 => 'THROWN_OBJ',
7342     49 => 'BLINDNESS',
7343     50 => 'GOD',
7344     51 => 'DETECTOR',
7345     52 => 'TRIGGER_MARKER',
7346     53 => 'DEAD_OBJECT',
7347     54 => 'DRINK',
7348     55 => 'MARKER',
7349     56 => 'HOLY_ALTAR',
7350     57 => 'PLAYER_CHANGER',
7351     58 => 'BATTLEGROUND',
7352     59 => 'PEACEMAKER',
7353     60 => 'GEM',
7354     62 => 'FIREWALL',
7355     63 => 'ANVIL',
7356     64 => 'CHECK_INV',
7357     65 => 'MOOD_FLOOR',
7358     66 => 'EXIT',
7359     67 => 'ENCOUNTER',
7360     68 => 'SHOP_FLOOR',
7361     69 => 'SHOP_MAT',
7362     70 => 'RING',
7363     71 => 'FLOOR',
7364     72 => 'FLESH',
7365     73 => 'INORGANIC',
7366     74 => 'SKILL_TOOL',
7367     75 => 'LIGHTER',
7368     76 => 'TRAP_PART',
7369     77 => 'WALL',
7370     78 => 'LIGHT_SOURCE',
7371     79 => 'MISC_OBJECT',
7372     80 => 'MONSTER',
7373     81 => 'SPAWN_GENERATOR',
7374     82 => 'LAMP',
7375     83 => 'DUPLICATOR',
7376     84 => 'TOOL',
7377     85 => 'SPELLBOOK',
7378     86 => 'BUILDFAC',
7379     87 => 'CLOAK',
7380     90 => 'SPINNER',
7381     91 => 'GATE',
7382     92 => 'BUTTON',
7383     93 => 'CF_HANDLE',
7384     94 => 'HOLE',
7385     95 => 'TRAPDOOR',
7386     98 => 'SIGN',
7387     99 => 'BOOTS',
7388     100 => 'GLOVES',
7389     101 => 'SPELL',
7390     102 => 'SPELL_EFFECT',
7391     103 => 'CONVERTER',
7392     104 => 'BRACERS',
7393     105 => 'POISONING',
7394     106 => 'SAVEBED',
7395     107 => 'POISONCLOUD',
7396     108 => 'FIREHOLES',
7397     109 => 'WAND',
7398     111 => 'SCROLL',
7399     112 => 'DIRECTOR',
7400     113 => 'GIRDLE',
7401     114 => 'FORCE',
7402     115 => 'POTION_EFFECT',
7403 root 1.11 116 => 'EVENT_CONNECTOR',
7404 root 1.3 121 => 'CLOSE_CON',
7405     122 => 'CONTAINER',
7406     123 => 'ARMOUR_IMPROVER',
7407     124 => 'WEAPON_IMPROVER',
7408     130 => 'SKILLSCROLL',
7409     138 => 'DEEP_SWAMP',
7410     139 => 'IDENTIFY_ALTAR',
7411     150 => 'MENU',
7412     154 => 'RUNE',
7413     155 => 'TRAP',
7414     156 => 'POWER_CRYSTAL',
7415     157 => 'CORPSE',
7416     158 => 'DISEASE',
7417     159 => 'SYMPTOM',
7418     160 => 'BUILDER',
7419 root 1.9 161 => 'MATERIAL',
7420     162 => 'GPS',
7421     163 => 'ITEM_TRANSFORMER',
7422     164 => 'QUEST'
7423 root 1.1 );
7424    
7425     our %SPELL = (
7426 root 1.3 0 => 'magic bullet',
7427     1 => 'small fireball',
7428     2 => 'medium fireball',
7429     3 => 'large fireball',
7430     4 => 'burning hands',
7431     5 => 'small lightning',
7432     6 => 'large lightning',
7433     7 => 'magic missile',
7434     8 => 'create bomb',
7435     9 => 'summon golem',
7436     10 => 'summon fire elemental',
7437     11 => 'summon earth elemental',
7438     12 => 'summon water elemental',
7439     13 => 'summon air elemental',
7440     14 => 'dimension door',
7441     15 => 'create earth wall',
7442     16 => 'paralyze',
7443     17 => 'icestorm',
7444     18 => 'magic mapping',
7445     19 => 'turn undead',
7446     20 => 'fear',
7447     21 => 'poison cloud',
7448     22 => 'wonder',
7449     23 => 'destruction',
7450     24 => 'perceive self',
7451     25 => 'word of recall',
7452     26 => 'invisible',
7453     27 => 'invisible to undead',
7454     28 => 'probe',
7455     29 => 'large bullet',
7456     30 => 'improved invisibility',
7457     31 => 'holy word',
7458     32 => 'minor healing',
7459     33 => 'medium healing',
7460     34 => 'major healing',
7461     35 => 'heal',
7462     36 => 'create food',
7463     37 => 'earth to dust',
7464     38 => 'armour',
7465     39 => 'strength',
7466     40 => 'dexterity',
7467     41 => 'constitution',
7468     42 => 'charisma',
7469     43 => 'create fire wall',
7470     44 => 'create frost wall',
7471     45 => 'protection from cold',
7472     46 => 'protection from electricity',
7473     47 => 'protection from fire',
7474     48 => 'protection from poison',
7475     49 => 'protection from slow',
7476     50 => 'protection from paralysis',
7477     51 => 'protection from draining',
7478     52 => 'protection from magic',
7479     53 => 'protection from attack',
7480     54 => 'levitate',
7481     55 => 'small speedball',
7482     56 => 'large speedball',
7483     57 => 'hellfire',
7484     58 => 'dragonbreath',
7485     59 => 'large icestorm',
7486     60 => 'charging',
7487     61 => 'polymorph',
7488     62 => 'cancellation',
7489     63 => 'confusion',
7490     64 => 'mass confusion',
7491     65 => 'summon pet monster',
7492     66 => 'slow',
7493     67 => 'regenerate spellpoints',
7494     68 => 'cure poison',
7495     69 => 'protection from confusion',
7496     70 => 'protection from cancellation',
7497     71 => 'protection from depletion',
7498     72 => 'alchemy',
7499     73 => 'remove curse',
7500     74 => 'remove damnation',
7501     75 => 'identify',
7502     76 => 'detect magic',
7503     77 => 'detect monster',
7504     78 => 'detect evil',
7505     79 => 'detect curse',
7506     80 => 'heroism',
7507     81 => 'aggravation',
7508     82 => 'firebolt',
7509     83 => 'frostbolt',
7510     84 => 'shockwave',
7511     85 => 'color spray',
7512     86 => 'haste',
7513     87 => 'face of death',
7514     88 => 'ball lightning',
7515     89 => 'meteor swarm',
7516     90 => 'comet',
7517     91 => 'mystic fist',
7518     92 => 'raise dead',
7519     93 => 'resurrection',
7520     94 => 'reincarnation',
7521     95 => 'immunity to cold',
7522     96 => 'immunity to electricity',
7523     97 => 'immunity to fire',
7524     98 => 'immunity to poison',
7525     99 => 'immunity to slow',
7526     100 => 'immunity to paralysis',
7527     101 => 'immunity to draining',
7528     102 => 'immunity to magic',
7529     103 => 'immunity to attack',
7530     104 => 'invulnerability',
7531     105 => 'defense',
7532     106 => 'rune of fire',
7533     107 => 'rune of frost',
7534     108 => 'rune of shocking',
7535     109 => 'rune of blasting',
7536     110 => 'rune of death',
7537     111 => 'marking rune',
7538     112 => 'build director',
7539     113 => 'create pool of chaos',
7540     114 => 'build bullet wall',
7541     115 => 'build lightning wall',
7542     116 => 'build fireball wall',
7543     117 => 'magic rune',
7544     118 => 'rune of magic drain',
7545     119 => 'antimagic rune',
7546     120 => 'rune of transferrence',
7547     121 => 'transferrence',
7548     122 => 'magic drain',
7549     123 => 'counterspell',
7550     124 => 'disarm',
7551     125 => 'cure confusion',
7552     126 => 'restoration',
7553     127 => 'summon evil monster',
7554     128 => 'counterwall',
7555     129 => 'cause light wounds',
7556     130 => 'cause medium wounds',
7557     131 => 'cause serious wounds',
7558     132 => 'charm monsters',
7559     133 => 'banishment',
7560     134 => 'create missile',
7561     135 => 'show invisible',
7562     136 => 'xray',
7563     137 => 'pacify',
7564     138 => 'summon fog',
7565     139 => 'steambolt',
7566     140 => 'command undead',
7567     141 => 'holy orb',
7568     142 => 'summon avatar',
7569     143 => 'holy possession',
7570     144 => 'bless',
7571     145 => 'curse',
7572     146 => 'regeneration',
7573     147 => 'consecrate',
7574     148 => 'summon cult monsters',
7575     149 => 'cause critical wounds',
7576     150 => 'holy wrath',
7577     151 => 'retributive strike',
7578     152 => 'finger of death',
7579     153 => 'insect plague',
7580     154 => 'call holy servant',
7581     155 => 'wall of thorns',
7582     156 => 'staff to snake',
7583     157 => 'light',
7584     158 => 'darkness',
7585     159 => 'nightfall',
7586     160 => 'daylight',
7587     161 => 'sunspear',
7588     162 => 'faery fire',
7589     163 => 'cure blindness',
7590     164 => 'dark vision',
7591     165 => 'bullet swarm',
7592     166 => 'bullet storm',
7593     167 => 'cause many wounds',
7594     168 => 'small snowstorm',
7595     169 => 'medium snowstorm',
7596     170 => 'large snowstorm',
7597     171 => 'cure disease',
7598     172 => 'cause red death',
7599     173 => 'cause flu',
7600     174 => 'cause black death',
7601     175 => 'cause leprosy',
7602     176 => 'cause smallpox',
7603     177 => 'cause white death',
7604     178 => 'cause anthrax',
7605     179 => 'cause typhoid',
7606     180 => 'mana blast',
7607     181 => 'small manaball',
7608     182 => 'medium manaball',
7609     183 => 'large manaball',
7610     184 => 'mana bolt',
7611     185 => 'dancing sword',
7612     186 => 'animate weapon',
7613     187 => 'cause cold',
7614     188 => 'divine shock',
7615     189 => 'windstorm',
7616     190 => 'sanctuary',
7617     191 => 'peace',
7618     192 => 'spiderweb',
7619     193 => 'conflict',
7620     194 => 'rage',
7621     195 => 'forked lightning',
7622     196 => 'poison fog',
7623     197 => 'flaming aura',
7624     198 => 'vitriol',
7625     199 => 'vitriol splash',
7626     200 => 'ironwood skin',
7627     201 => 'wrathful eye',
7628     202 => 'town portal',
7629     203 => 'missile swarm',
7630     204 => 'cause rabies',
7631     205 => 'glyph'
7632 root 1.1 );
7633    
7634    
7635     =head1 AUTHOR
7636    
7637     Marc Lehmann <schmorp.de>
7638     http://home.schmorp.de/
7639    
7640     The source files are part of the CFJavaEditor.
7641    
7642     =cut
7643    
7644     1