ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/doc/Developers/spells
Revision: 1.1
Committed: Fri Feb 3 07:12:36 2006 UTC (18 years, 4 months ago) by root
Branch: MAIN
Branch point for: UPSTREAM
Log Message:
Initial revision

File Contents

# User Rev Content
1 root 1.1 SPELLS:
2     ------------------------------------------------------------------------------
3     Index:
4    
5     1. Background
6     2. Spell Objects
7     3. Spell Paths
8     4. Spell Subtypes
9     5. Spell Casting Objects
10     6. Arch Directory Layout
11     7. Programming Notes
12     8. Abilities
13    
14     ------------------------------------------------------------------------------
15     1. BACKGROUND
16    
17     This document describe all things spell and spell related that developers
18     need to know. This document outlines the new spell objects and how
19     this all works.
20    
21     ------------------------------------------------------------------------------
22     2. SPELL OBJECTS
23    
24     In the old model, each spell had a specific number associated with it.
25     Monster spell abilities, while objects, just said to use spell number
26     X. Given that everything else in the game is object, this hardcoding
27     of spells was less than ideal.
28    
29     In the new system, spells are objects. The spell object the player knows
30     has the characteristics of the spell. As a first pass, the existing
31     spells are just converted to object form. As time passes, new spells
32     can be easily added in this system. It also simplifies the code - the
33     spells a player knows are now objects in his inventory. The spell
34     a wand casts is the spell in its inventory. The spell a scroll casts
35     is the spell in its inventory, and the spell you learn by reading
36     a spellbook is the spell in its inventory.
37    
38     This model makes it very easy to make variations of some spells. Want
39     to make an extra large fireball? All this is needed is to take the
40     large fireball arch, increase a few parameters, and your all set.
41    
42     The following is the fields in the object structure, and how they
43     correspond to a spell. Fields that are not mentioned are not used.
44    
45     char *name: Name of the spell (large fireball, icestorm, etc)
46    
47     char *lore: Description of the spell to be put in books, or perhaps even
48     to just let the player see. In a sense, this puts documentation of
49     the spells within the object, instead of having to maintain seperate
50     files.
51    
52     sint16 casting_time : How long it takes to cast the spell (was time)
53     This is the number of ticks it takes for the player to cast the spell,
54     and is thus not a fixed time.
55    
56     Suggested casting time values:
57     5: Combat spells (cones, bolts, balls, etc - ones you cast when in
58     danger)
59     10-15: Protection spells, other often cast spells. Summoning spells
60     would fall into this category, as they are often cast when not
61     in immediate danger.
62     ~25: Detection spells, or other spells done when times are safe.
63     Many ability improvement spells might fall into this category.
64    
65     These are only suggestions - they more or less match when the spell will
66     be used and usefulness. An attack spell that takes forever to cast
67     isn't very useful. There are really two things to keep in mind - when
68     the spell is cast, and how long the spell itself last. A long lasting
69     spell can have a longer casting time, simply because it isn't cast
70     that often and will last for a while (thus, smart players won't cast
71     it in combat).
72    
73     face/anim: If the spells is a generic spell that doesn't have an other_arch
74     pointer, this is the face (or animation to use when the spell is
75     cast.
76    
77     uint8 type: SPELL (101) (to denote this is spell object)
78     sint16 resist[] values: For protection spells, resistance they provide.
79     uint32 attacktype: Attacktype of the spell.
80    
81     uint32 path_*: spell path information. Note as of this writing, only
82     path_attuned is expected to mean anything. However, I can envision
83     the user of path_repelled/denied to denote that if the caster is
84     attuned to some path, they have penalties in casting this spell.
85    
86     sint32 value: Base value of this spell for scroll, spellbooks, wands, rods.
87     sint16 level: Level of the spell
88    
89     other_arch: archetype this spell uses. In the case of bolts, this
90     is the bolt that is fired.
91    
92     char *skill (new): Skill needed to cast this spell.
93    
94     sint32 subtype (new): Sub classification for this spell. It sort of
95     relates to the existing spell number, but in a more general form.
96     At first pass, subtypes would fall into protection spells, bolt
97     spells, ball spells, cone spells, stat increase spells. There
98     are a number of spells which can not be abstracted and are unique
99     in their own right (dimension door, word of recall, polymorph, etc).
100     In these cases, there will be one value for that spell type.
101    
102     invisible: Always set to 1, so that the player can't directly see it in their
103     inventory.
104    
105     no_drop: Always 1, so when a spell object is destroyed, the spell it
106     contains is dropped and not freed.
107    
108    
109     From living/stats substructure:
110     Str, Dex, etc: If spell changes and ability, this is the ability it changes.
111     sint16 dam: Base damage the spell does:
112     sint16 sp: how many spellpoints the spell costs
113     sint16 grace: how much grace the spell costs
114     sint16 maxsp/maxgrace: Every 'maxsp/maxgrace' levels beyond its base level,
115     the spell cost doubles (this is pro rated like the old code. For example,
116     if a first level spell costs 5 sp, and maxsp is 5, then at level 6 it
117     would cost 10 sp. However, at level 2, it is 6 sp, level 3 is 7 sp,
118     etc.
119     New fields added to object structure:
120    
121     uint8 dam_modifier:
122     for every maxdam levels above what is needed to cast the spell, it does an
123     extra point of damage. Note if you want a spell to double its damage
124     every X levels, the maxdam may have to be quite low (1) if the spell does
125     high damage. For example, suppose you have a 10'th level spell that does
126     50 damage. If dam_modifier is 5, then every 5 levels it does one extra
127     point, so at level 25, it would do 53. If dam_modifier is 1, then at
128     level 25 it would do 65.
129    
130     sint16 duration: Base duration of the spell (was bdur)
131     uint8 duration_modifier: Modifies duration of spell, acts the same way
132     as dam_modifier.
133    
134     uint8 range: Range of the spell - this could be how far a lightning
135     bolt goes, how big that fireball is, etc. Spells with range 0
136     are personal only spells. Spells with range 1 can touch
137     a person on a neighboring space. range will not change based
138     on level of the caster - if higher range is desired, different
139     spell should be made.
140     uint8 range_modifier: Modifies range of spell, acts ame way as dam_modifier
141    
142     TBD:
143     There are also many fields in the spell structure which are not
144     copied - charges, scrolls, scroll_chance, books, defensive,
145     cleric, onself.
146    
147     The defensive, and onself can largely be derived from the
148     subtype above. if subtype is protection or healing, it'd be
149     self.
150    
151     cleric is basically redundant now - the skill says what skill to use
152     for this spell. Note that a spell could in theory cost both mana
153     and grace - what it costs is not necessarily tied to a skill. However,
154     it would be bad practice to make a wizardry spell use mana. However,
155     I could potentially see hybrid skills that have some variosu benefits,
156     or if we have say a 'magic' god, perhaps some special spells it provides
157     a use mana.
158    
159     So lets next touch on the idea of treasurelist for spell objects.
160    
161     As mentioned above, spell objects, like wands, spellbooks, scrolls,
162     etc, contain the spell they cast. The way spells end up in those
163     objects is via a mechanism there is already code for - treasurelists.
164    
165     Currently, the treasure generation code notices if a wand, rod, spellbook,
166     or scroll is generated. If so, it calls special code that looks
167     at the field of the spell structure and randomly chooses a spell.
168    
169     Instead, this is just replaced with treasurelists. The scroll object
170     would have a 'randomitems scroll', wands a 'randomitems wand',etc. These
171     may be big treasure lists, but that shouldn't post any problem. More
172     likely, these lists would be broken up into smaller pieces (eg,
173     scroll_low_level, scroll_medium_level, scroll_high_level).
174    
175     This provides finer resolution than is currently allowed in the spell
176     structure - you could make some spell available only in rods, but not
177     wands. you can better adjust things to better spells show up in
178     tougher dungeons, etc,
179    
180     When a spell is cast, often it copies over certain values into the
181     SPELL_EFFECT (102). The subtype of the SPELL_EFFECT, which should generally
182     match that of SPELL itself, determines what the spell does.
183    
184     ------------------------------------------------------------------------------
185     3. SPELL PATHS DOCUMENTATION
186    
187     Long ago a number of archmages discovered patterns in the web that spells
188     weave in the aether. They found that some spells had structural similarities
189     to others and some of the mages took to studying particular groups of spells.
190     These mages found that by molding their thought patterns to match the patterns
191     of the spells they could better utilise all the spells of the group. Because
192     of their disciplined approach, the mages were described as following spell
193     Paths. As they attuned themselves to particular spell Paths they found that
194     they would become repelled from others, and in some cases found they were
195     denied any access to some paths. The legacy of these mages remains in some
196     of the magical items to be found around the world.
197    
198     Technical details:
199     In the same way that players and objects can be protected, immune, and
200     vulnerable to the different types of attacks, they can now be attuned,
201     repelled, or denied access to the different spell Paths. An object that
202     is attuned to a Path cast spells from that Path at 80% of the spell point
203     cost and receives duration/damage bonuses as if the caster were five levels
204     higher. An object that is repelled from a Path casts spells from that Path
205     at 125% of the spell point cost and receives duration/damage bonuses as if
206     the caster were five levels lower (minimum of first level). An object that
207     is denied access to a Path cannot cast any spells from it. The casting
208     time is also modified by 80% and 125% respectively. These values are
209     defined in PATH_SP_MULT (from spells.h), PATH_TIME_MULT (from spells.h), and
210     path_level_mod (from spells.c)
211    
212     The Paths themselves are the following:
213     "Nothing",
214     "Protection",
215     "Fire",
216     "Frost",
217     "Electricity",
218     "Missiles",
219     "Self",
220     "Summoning",
221     "Abjuration",
222     "Restoration",
223     "Detonation",
224     "Mind",
225     "Creation",
226     "Teleportation",
227     "Information",
228     "Transmutation",
229     "Transferrence".
230    
231     See define.h for the number values corresponding to the Path.
232    
233     Some more will be added in the near future. Some spells do not currently
234     belong to a Path, this is probably appropriate for some spells.
235     Paths are inherited just like protection/immunity/vulnerability, ie if a
236     ring contains "path_attuned 1", the wearer becomes attuned to the Path of
237     Protection.
238    
239     Paths are quite powerful and shouldn't be given away cheaply. Ideally, most
240     objects with path_attuned attributes should have path_repelled and path_denied
241     attributes as well, to balance out (eg attuned to Fire, repelled from
242     Protection, and denied from Restoration)
243    
244     ------------------------------------------------------------------------------
245     4. Spell Subtypes
246    
247     This section lists specific spell subtypes and what they really
248     do. The idea is to try and generalize the object types (cones,
249     bolts, balls, etc). However, some number of spells, most notably
250     detection spells, must have their own entries because the code that
251     is actually executed needs to re-act accordingly.
252    
253     SP_RAISE_DEAD (1)
254     These spells bring back dead players. These spells are only useful
255     on servers that use PERMADEATH.
256    
257     Con: The number of con points the target character loses.
258     exp: the experience loss ratio (eg, exp -= exp/spell->stats.exp.
259     If zero, no exp is lost
260     last_heal: If set, corpse isn't required, just character name
261     randomitems: If set, then when the spell fails, the treasurelist is used
262     to determine what nasty monsters to summon. Note that this
263     list is not processed as a normal list - rather, everything
264     on the list is created, so chance values are meaningless.
265     race: If set, this is used as a treasurelist to determine what
266     class to change the character to (reincarnation). Basically,
267     it just looks up the treasurelist that is using the race name. This
268     should be a treasureone type list.
269    
270     SP_RUNE (2)
271     Runes are objects that embed another spell in them, and are activated
272     when someone walks on top of the rune. Runes can be disarmed.
273    
274     other_arch: This can be set to one of 3 values:
275     Name of rune (type = rune): If this is the case, rune is put on
276     the map with few changes.
277     name of spell: In this case, the spell is embedded into the the rune.
278     generic_rune object will be used, with the face updated.
279     NULL: in this case, the player specifies the rune to embed.
280     face: Face that the rune object will use.
281    
282     If other_arch is set in the spell object, then it is assumed that
283     the sp (or grace) cost in the spell object is the total that should
284     be used. If it is an embedded spell, then the cost will be in
285     addition to that to cast the spell.
286    
287     Special rules for runes where player can choose what spell to embed:
288     skill for the embedded spell must match the rune
289     Player must have enough mana/grace to embed the spell as well as cast
290     the actual rune.
291    
292     Note that runes created by players/monsters will have the spell put into
293     the rune's inventory. However, archetype runes will still use the other
294     arch, as inventory in archetypes isn't really supported.
295    
296     This really works fine - This allows custom spells to be embedded into
297     runes. For archetypes, using the default spell archetypes work fine.
298    
299     SP_MAKE_MARK (3): This makes a 'mark' that contains a message. In the old
300     system, this used to be part of the rune code, but it really doesn't
301     have anything in common with runes (except in name).
302    
303     other_arch: Object used to store the message.
304    
305     SP_BOLT (4):
306     This fires a bolt (other_arch) of the spell object. All of the
307     following values are copied from the spell object and into the
308     bolt object (other_arch in the spell object).
309    
310     damage, attacktype, slaying have normal meaning
311    
312     range (exp): How many more spaces this will go before it ends.
313     duration (hp): How long it stays on each space.
314     Dex: chane (percentage) the bolt has of forking
315     Con: Chance that the bolt forks left.
316    
317     Note if duration is less than range, which it should typically be,
318     then a bolt will only be in a subsection of the entire range.
319    
320     A bolt object can have the generator flag set, in which case as
321     the bolt moves along, it will create an other_arch object. The
322     steambolt is an example of this. This can not be set in the spell object,
323     and is instead set in the other_arch field that the spell refers to.
324    
325     SP_BULLET (5):
326     Bullets are single objects that go in a direction and hit
327     something. The simplest case here is magic bullet, that hits
328     something and does damage.
329    
330     exploding ball type spells are a more complicated variation. These
331     object start out as a bullet, but when they hit something, they
332     explode, into fire or poison or the like. The other_arch field
333     determines what they explode into.
334    
335     Values for spell object
336     range: diameter of the explosion (copied into maxhp).
337     Note that for the bullet itself, the range is always set to 50.
338     other_arch: bullet object to create.
339     dam: how much damage the bullet does.
340     attacktype: copied to the bullet.
341     slaying: copied to the bullet.
342     duration: How long the explosion lasts for. Not used for bullet
343     only spells. copied into hp field of the bullet object.
344     food (& dam adjust): Damage the explosion does. copied into the bullet
345     dam_modifier field.
346    
347     See notes about explosion below.
348    
349     SP_EXPLOSION (6):
350     Objects of subtype explosion are really only useful when attached
351     to a bullet - you don't really want to explode something on yourself.
352    
353     Note that the set up of the below values is also the same for
354     SP_CONE types if a cone is attached to a bullet.
355    
356     attacktype: from other_arch, but add magic if bullet has it.
357     damage: this is copied over the the bullet dam_modifier. The
358     bullet dam_modifier is based on the 'food' value
359     range: Copied over from stats.maxhp. This determines the radius of the
360     explosion.
361     duration: copied over from stats.hp. This determines how long the
362     explosion lingers.
363    
364     Given two objects are created from one spell, tuning this/creating
365     new spells of this type is tricky. We can only use the range for
366     the bullet or explosion. Likewise, adjusting damage is difficult.
367     Ideally, perhaps, some additional fields in the spell object itself
368     are used to fully implement this, eg, these two fields determine the
369     range/damage of the bullet, and these 3 determine range/blast/damage
370     of the ball itself. That is the only real way to make a ball
371     spell fully adjustable.
372    
373     SP_CONE (7):
374     sp is the overall direction of the cone is moving in.
375     other_arch: object to create as it moves along.
376     flag_lifesave: if true, object never goes away (eg, lava)
377     duration: This is how many ticks the spell stays on space.
378     flag_stand_still (was food): Causes the object not to progress
379    
380     Note that SP_CONE can be the other_arch of a SP_BULLET. In this
381     case, the set up of the cone values is as described in SP_EXPLOSION
382     setting.
383    
384     Note 2: The other_arch that is in the cone can really be any object.
385     As such, the code does not modify this object, other than to
386     set proper ownership. As such, you can't set what values will be
387     set in the arch thus created
388    
389     vitriol is the best example of both of these notes - it starts out
390     as a bullet, which then turns into a cone, which then drops acid
391     pools.
392    
393     SP_BOMB (8):
394     Bombs are as they are described - objects that sit around for
395     a little while before exploding.
396    
397     The bomb itself is harmless - its not until it explodes do bad
398     things happen.
399    
400     In the bomb object, the following attributes are set up:
401     dam: damage of the flying fragments/explosion
402     range: how far the fragments/explosion extends.
403     duration: How long the explosion lasts.
404     attacktype: Type of damage the bomb does.
405    
406     bombs tick at a constant rate, as defined by there speed. They explode
407     when the finish their last animation. There is no way to adjust
408     this rate of ticking in the spell object, other than to point
409     other_arch at a customized bomb.
410    
411     A bomb then explodes. It explodes into 'splints' (this is
412     unfortuantely hardcode), and the other_arch pointer of the bomb,
413     which default is of SP_EXPLOSION.
414    
415     SP_WONDER(9):
416     wonder is a spell that will cast another spell. It will also sometimes
417     cast a cone of flowers (other_arch).
418    
419     randomitems: treasure list to look for spell to cast.
420    
421     Note old wonder code would only cast spell that would be found in
422     books. This new code can be used to cast most any spell, as defined
423     as in the treasurelist.
424    
425     Note 2: Ideally, the flower effect should also be in this treasure list,
426     so the occurence could be accurately controlled.
427    
428     SP_SMITE(10):
429     smite spells are target spells - the spell looks for an appropriate
430     enemy in the direction pointed, and if one is found, hits them with
431     whatever is in the other_arch. It is generally assumed that other_arch
432     will point to another spell.
433    
434     other_arch: Object to create.
435     dam, range, duration (& modifiers) are copied into the spell effect
436     that other_arch points to.
437     attacktype: Attacktype to give to the spell effect.
438    
439     Special notes if attacktype includes a death attacktype (finger
440     of death):
441     Won't work on undead - makes them strong.
442     the level of the created object is set to the dam (& modifier)
443     of the spell.
444    
445    
446     SP_MAGIC_MISSILE(11):
447     magic missiles are really just a bullet type object that have
448     some more intelligence in their guiding (but not much). Basically,
449     a magic missile will more or less go in the direction it is fired,
450     but will adjust course to hit a monster. Thus, if something isn't
451     perfectly lined up, magic missile will still hit it.
452     range, attacktype, etc, all have normal meanings.
453    
454    
455     SP_SUMMON_GOLEM(12):
456     This spell summons a friendly creature/object that helps out the
457     player.
458    
459     other_arch: Pet/object this spell creates.
460     race: If set to 'holy servant' or 'avatar', this is now a
461     summon avatar spell, whose monster is determined based on the
462     god being worshipped. Note that these names are just passed
463     to determine_holy_arch()
464     dam: How much damage the golem will do. dam_modifier alters this in the
465     expected way. If zero, damage from the golem is used, but damage
466     modifer will still be added.
467     duration: increases the golems hp, which basically amounts to duration.
468     attacktype: If set, golem gets this attacktype instead of the
469     normal arch attacktype.
470     range_modifier: This adjust the wc and speed of the creature.
471    
472     golems lose 1 hp each time they do something. This effectively
473     limits their duration, but does mean it can be extended by healing
474     the golem. Not sure if this is the way to go, or if duration
475     should really just be used.
476    
477     Note - the old code had ldam and ldur have multiple meanings, and
478     the code multipled them by 10 internally. This is no longer done -
479     instead, the archetype itself should have the real value (10 times
480     the old compiled in values)
481    
482     SP_DIMENSION_DOOR(13):
483     dimension door lets the player move some large number of spaces.
484     One still can not teleport through no magic areas.
485     range: How far we will move the player
486     maxsp, level_modifier: Normal spell meaning.
487    
488     SP_MAGIC_MAPPING(14):
489     This draws an overview of the map around the player. There are currently
490     no parameters the spell takes - the results are always the same. One could
491     forsee parameters to change how far one sees, what one sees, etc.
492    
493     SP_MAGIC_WALL(15):
494     This spell creates a magic wall. Walls can have a wide set of
495     properties. Many are determined by the other_arch or race (the wall
496     the spell creates).
497    
498     other_arch: wall to create.
499    
500     race: Name of the object to summon. This should include the %d.
501     eg, 'director_%d'. Note that if the object is non directional,
502     just don't include the %d in the race. Note that if both other_arch
503     and race is set, then other_arch takes precedence
504    
505     no_pass: If set, then the object can not be created on the space the
506     player is standing on. In all cases, the object can not be
507     created on a space that is blocked by an object.
508    
509     is_used_up: If set, then this flag is set in the created object
510    
511     tear_down: If set, this flag is then set in created object, as well
512     as flag_alive
513    
514     range (and range_modifier): How many spaces in each direction the wall
515     should go. If this is 1, the wall will be 3 spaces total (1 + 1 in
516     each direction). If this is 0, the wall is a single space.
517    
518     attacktype: Attacktype to set on the created wall.
519     duration (and duration_modifier): The number of hit points/duration
520     of the wall.
521     dam and dam_modifier: Damage the wall does.
522    
523     Exactly how the a attacktype, duration, and damage values play out
524     depend on what is being created and the spell.
525    
526     Created object is of type SPELL_EFFECT: attacktype, dam, and duration
527     are copied into fields of same name.
528    
529     Created object is alive: duration becomes the objects hit points.
530    
531     is_used_up (either in spell, or created object): duration put
532     into objects food value.
533    
534     tear_down (in spell only): Spells damage value is copied into
535     objects hp/maxhp
536    
537     The level of the created object is always set to half that of
538     the caster level.
539    
540     SP_DESTRUCTION(16):
541     Destruction hits all the spaces within some distance of the player
542     with damage.
543    
544     range (& modifier): Number of spaces in each direction to do damage to.
545     dam (& modifier): Amount of damage to do to each creature.
546     attacktype: Attacktype to hit the creatures with.
547     other_arch: This can in practice be anything, but is typically just used
548     as an effect to show what spaces where hit.
549     race
550    
551     Note: As converted to a spell object, this is now usuable by monsters.
552     The rule for what is damaged is basically this:
553     If cast by a player/friendly creature, damages non players/non friendlies.
554     If cast by a monster (non friendly), damages players/friendlies.
555    
556     SP_PERCEIVE_SELF(17):
557     This is really just a hook to know to call the right routine - at
558     current time, none of the dam/range/duration fields of the spell
559     have any meaning - only think that is used is the grace and skill
560     pointers.
561     perceive self basically presents information to the player about themselves,
562     eg, race, any depletions, etc. Generally, isn't that useful since most
563     all the same information is available with built in commands.
564    
565     SP_WORD_OF_RECALL(18)
566     Word of recall teleports the player back 'home' after some amount
567     of time. Parameters:
568     duration: How many ticks until the player is returned hom.
569     duration_modifier: This _reduces_ the duration above so that the player
570     return home quicker.
571    
572    
573     SP_INVISIBLE(19):
574     Makes the character invisible to monsters.
575     duration (& duration_modifier): How long to be invisible for.
576     race: What to make the player invisible against. Note this
577     only applies for when players cast invisible - monsters
578     will always be invisible to players, and not care about
579     the race field. race 'undead' has a bit special meaning,
580     as it will chack against the flag_undead field. race can
581     be NULL, in which case it will make the player invisible
582     to everything _but_ undead. Note also that check is done that
583     'race' a subset of the race of the monster (eg, don't use
584     comma seperated values).
585     It is not possible to be invisible to both undead and non
586     undead at the same time.
587     make_invisible: if set, this is 'improved' invisible vs temporary
588     invisibility that disappears when attacking.
589    
590     SP_PROBE (20): This spell looks in some direction (as specified by the player)
591     and returns information about a monster.
592     range (& modifier): How far off in a direction to look.
593    
594     SP_HEALING(21): This spell heals a character/monster. Creature must
595     be where the player is.
596     attacktype: Attacktypes to heal:
597     AT_DISEASE: cure diseases.
598     AT_POISON: remove poisoning.
599     AT_CONFUSION: remove confusion.
600     AT_BLIND: remove blindness
601     stats.food: Food amount to add to character.
602     stats.dam: how much to heal.
603     stats.hp: Number of d6 to roll for healing.
604     last_sp: Regenerate this number of spell points.
605     last_grace: Regenerate this number of grace points.
606     (since the sp and grace fields are used for how much it costs
607     to use the spell, we can't re-use those fields unfortuantely)
608     other_arch: seems unused - kept could be used as a spell effect
609     indicator.
610     Note that any number of these fields can be combined.
611    
612     SP_CREATE_FOOD(22): This creats food for the player. The food is
613     not worth any money, but otherwise normal food.
614     food: Base amount of food to create.
615     duration_modifier: Creates an addition 50 food/increase of this value.
616    
617     The formula for how much food value is created is:
618     food_value=spell_ob->stats.food +
619     + 50 * SP_level_duration_adjust(caster,spell_ob);
620    
621     SP_EARTH_TO_DUST(23): This destroys earthwalls near the player.
622     range (& modifier): Radius to destroy earthwalls in. Note that
623     this is a 'square' radius.
624    
625     SP_CHANGE_ABILITY(24): this adjust some ability the player has (str,
626     dex, attacktypes, etc). This is only for beneficial effects - this
627     is mostly because of the targetting logic (negative effect would
628     still target friendly creature).
629    
630     By default, only one benefit spell of each time can be active at a
631     time (eg, you could have a strength and a dex, but not two strength
632     spells). This is noormally tracked by changing the force name to
633     be the same name as the spell, but see the race attribute below.
634    
635     If a spell is already in effect, the duration of the existing
636     spell will be increased, but otherwise none of the spell effects
637     will be changed.
638    
639     race: If this is set, this is used instead of the spell name when
640     renaming the force. This is useful if you only want one of a group
641     of spells active at once (this is currently used for bless &
642     holy possession - you're allowed only one.) name_pl of the force
643     will always contain the other spell name.
644    
645     duration (& modifier): How long the spell lasts for. Note that duration
646     is in ticks. Note old system used damage for duration, and each
647     point of damage was basically 50 ticks. Note also that duration_modifier
648     is a bit difference - this increases durations in 50 ticks - this
649     is because most of these spells are long duration, and increasing
650     a 200 duration spell by 15 ticks if the caster is really high
651     level is pretty meaningless.
652    
653     resist_*: The protection the spell grants. Note that the code does
654     no sanity checking on these values, other than to make sure they
655     do not exceed 100. Before spell objects, there was code to put
656     caps on these values. There is no practical way to say waht the
657     caps should be if so put on - instead, just make sure that
658     that dam_modifier is a sane value.
659    
660     dam_modifier: Increases the resistance granted by 1 point.
661    
662     ac: Benefit to armor class. This is copied over unmodified.
663     wc: Benefit to weapon class. This is copied over unmodified
664     hp: Copied over, but damage adjustment added as a bonus. hp
665     in the form of a force increases characters hp regen rate.
666    
667     Str, Dex, Con, Wis, Int, Pow, Cha: Attempted adjustement to the
668     stat. These values are number of d3's rolled to adjust. In
669     additin, these values also determine the max benefit based on the
670     recipient - the table is 15 + 5 * attr_value. If 1, then the
671     highest the recipients stat after this would be 20. If 2, highest
672     would be 25, if 3, highest would be 30, etc.
673    
674     flying, can_see_in_dark, xrays: Copied over to force -
675     gives caster this ability.
676    
677     attacktype: Added to force object, giving the caster the attacktype.
678    
679     exp: Copied over - this acts as bonus speed. This value is adjusted
680     so really fast players get less a benefit than slower players.
681    
682     SP_BLESS(25):
683     This blesses the character - the character gets various benefits
684     based on the god he worships. Note that BLESS spells use the same
685     type of force object as ability change above, include the race
686     to prevent multiple castings. Note that most of all of the values
687     are copied _from the god_. The value in the spell_object is only
688     really used to know if the value from the god should be copied.
689    
690    
691     resist_godpower: The character gets the resistance benefits that his
692     god gives (which can be anything). resist_godpower is the upper limit
693     of any benefit the character will get.
694    
695     last_grace: If set, players get same attunement as their god.
696    
697     attacktype: If non zero, the player gets the attacktype of the god.
698     The character also gets the slaying of the god if attacktype is set.
699    
700     ac, wc: Copied over from spell_ob to force.
701    
702     SP_CURSE(26):
703     This is a lot like BLESS. Notable difference is that this is a bad
704     effect for the recipient.
705    
706     ac,wc: Copied over from spell_ob - should be negative, since these
707     should be penalties.
708    
709     last_grace: If set, recipient is denied/repelled to spellpath that the
710     god is denied/repelled with.
711    
712     race: Same as for SP_BLESS, in that it can be used to limit number
713     of course type effects.
714    
715     range: Range of the spell.
716    
717     SP_SUMMON_MONSTER (27):
718     This covers a large subtype of monster/object summoning. At its
719     very basic, this spell will create an object that is unchanged
720     from the archetype, and thus can be used to basically create any object.
721    
722     other_arch: Object to create.
723    
724     randomitems: If set, a treasurelist to use to select the monster from.
725     The randomitems list for these spells is a bit special - the magic
726     entry is what the monsters effective level is. One can not summon
727     monsters of higher level than they are. Note that magic values
728     should be unique, as the list will use the highest value available.
729     So if two identical magic values are used, for different objects,
730     only the second entry would actually have monsters created.
731     In addition, the magic values should be in order.
732    
733     race: If set to "GODCULTMON", this is a special spell that will
734     create monsters associated with the players god. We can't use
735     either of the two fields to denote this, because they point to
736     other structures, and what monsters we should create can not be
737     defined easily in the archs, as it will depend on what god the player
738     worships.
739    
740     If multiple fields above are set, the order used is other_arch,
741     random_items, race. Only one of the values will be used - you can't
742     get multiple things created by setting up multiple values.
743    
744     attack_movement (move_type): If set, this is set in the monster. Thus, if
745     the object should be a pet, move_type should be set to PET_MOVE.
746    
747     dam (& modifier): Number of creatures to create. In the case of
748     spells that use randomitems (which can specify their own nrof), this
749     is acted as additional monsters.
750    
751     flag_monster: If set, creature will not be friendly. If cleared,
752     flag_friendly will be set on the monster (using the flag_friendly
753     in the spell_ob itself is problematic in that there is a special
754     list for friendly objects, and we really don't want the spell on that
755     list.
756     The reason not all summoned monsters are friendly is because there are
757     some spells that create monsters specifically meant to be agressive
758     to the player.
759     If flag_monster is set, the monster/created object is not changed.
760     Only if it is not set, do we set a value (flag_friendly).
761    
762     SP_RECHARGE (28):
763     This spell is used to recharge a wand.
764    
765     dam (& modifier): Number of 'spell levels' to recharge. Basically,
766     the number of charges increase in the wand by dam / wand spell level.
767     Thus, very low level wands are easier to recharge than high
768     level wands.
769    
770     SP_POLYMORPH (29):
771     This spell by default is disabled because of variosu abuses within
772     the spell.
773    
774     The spell normally turns one object into another similar type of
775     object (eg, orc to goblin, sword to dagger, etc).
776    
777     range (& modifier) How far the polymorph spell extends.
778     other_arch: Visual effect to draw on the map as it moves along.
779    
780     SP_ALCHEMY (30)
781     This turns nearby objects into gold nuggets.
782    
783     duration (& modifier): This is multiplied by 1000 to determine the
784     amount of material that will be converted (think of these values
785     as the amount of kilograms to be converted)
786    
787     SP_REMOVE_CURSE (31)
788     This removes the cursed/damned status of objects. It only
789     effects objects equipped by the player.
790    
791     cursed: uncurse cursed objects.
792     damned: remove damnation.
793    
794     SP_IDENTIFY(32)
795     This identifies objects in the players inventory and on the ground.
796     dam (& modifier): The number of objects to identify
797    
798     SP_DETECTION(33)
799     This detects nearby objects (including ones in the players inventory).
800     Detection in this context typically means revealing properties about
801     the objects.
802    
803     range (& modifier): How big a radius to look for objects. Radius
804     in this context is really a square - the size of the square would
805     be 2*range + 1, with the player being in the center.
806    
807     other_arch: The spell effect to draw on the map for spaces that match
808     the object. Note that for some detection types, the face is replaced
809     by the face of the matching object.
810    
811     This following attributes determine what objects to show. Note that
812     more than one of these can be set (for a 'detect all spell' for example).
813    
814     make_invisible: If true, show invisible objects
815     known_magical: If set, detect magical objects.
816     flag_monster: If set, detect monsters
817     known_cursed: If set, detects cursed objects.
818     race: If set, only detects creatures of this race. if race is
819     'GOD', then it uses the god's slaying race for the match.
820    
821     SP_MOOD_CHANGE (34):
822     This changes the 'mood' of a monster. See below for how moods are
823     changed.
824    
825     range (& modifier): How for this spell effects, just like SP_DETECT above.
826     race: If set, only monsters of matching race are effected. Can be set
827     to GOD_SLAYING, in which enemy races of the god are effected.
828     if set to GOD_FRIEND, then races alligned with the god are effected.
829     attacktype: Attacktype the spell hits with. The spell doesn't do any
830     damage - this instead is used for saving throw information. Note
831     that the monster uses its best resistance for the saving throw.
832     EG, the more attacktype the spell has, the better the odds.
833    
834     berserk (flag): Set the monster to be berserk, which basically means
835     it attacks anything (conflict spell)
836     unaggressive (flag): Sets the monster to be unaggressive. (pacify)
837     undead (flag): By default, undead are immune to mood changes. however, if
838     this flag is set, undead will be effected (limited by other criteria
839     above, like race (if set) and saving throw)
840     no_attack (flag): Make the creature friendly (charm & charm monster))
841     monster (flag): Wakes the monster up, makes it an enemy of the player
842     (aggravation)
843    
844     Note that a spell could set multiple of these fields, but it wouldn't
845     really do much - a monster can really only have one mood.
846    
847     SP_MOVING_BALL (35): This is really only used as a spell effect. Values
848     of note:
849    
850     path_repelled: If set, the player must be attuned to these paths
851     to cast the spell. This can basically be used to control
852     who can cast the spell.
853    
854     duration (& modifier): Copied into food of the object - this is
855     basically how long the spell lasts for.
856     dam & attacktype have expected meaning.
857     other_arch: Object that is used for the manifestation of the spell.
858     Must be set for spell to work.
859    
860     SP_SWARM (36)
861     swarms are spells that fire other spells. It fires the same spell,
862     but multiple times (eg, 5 lightning bolts).
863    
864     Set during casting:
865     duration: Number of d3 to roll to determine number of sub bolts.
866     duration_modifier: Added to duration as a bonus.
867     other_arch: Name of the other spell it fires.
868    
869     SP_CHANGE_MANA (37)
870     This gives/takes spellpoints to the target of the spell. If this spell
871     gives sp, the the cost should be more than the sp it gives. target must
872     be in the same or adjacent space.
873    
874     dam (& modifier): number of sp to transfer. If dam is negative, then this
875     spell takes away, and dam and modifier represent what percentage of sp
876     to drain (dam_modifier should still be positive). These sp are then
877     given to the caster of the spell.
878    
879     This subtypes corresponds to the old transferrence and drain magic
880     spells.
881    
882     SP_DISPEL_RUNE (38)
883     This removes runes from the ground. There are currently no
884     tunables for this spell.
885    
886     SP_CREATE_MISSILE (39)
887     Creates bolts or arrows.
888    
889     dam (& modifier): max plus of arrow that can be created.
890     duration (& modifier): Number of arrows to create.
891    
892     Note that making good (highly magical) arrows reduces
893     number of arrows to be made.
894    
895     SP_CONSECRATE (40)
896     This converts an altar to that of players god. There are currently
897     no tunables to this spell.
898    
899     SP_ANIMATE_WEAPON (41)
900     This spell is similar to the GOLEM spells - it basically creates
901     a golem, but uses a donor weapon for the face, basic attributes,
902     etc. To implement this, it puts the donor weapon in the inventory
903     of the golem, so when the golem dies, the weapon is returned
904     to the ground. Note that in the conversion, I modified this
905     spell to use the weapon 'marked' by the player, instead of the
906     equipped weapon.
907    
908     other_arch: The object used to encapsulate the weapon.
909     race: If set, the donor weapon must match this name. If this is not
910     set, then the face of the golem will be set to the weapon.
911     The reason for this is that if race is set, then since it
912     is matching a specific weapon, it is presumed that the
913     other_arch field can be appropriate set.
914     range_adjust: Bonus to wc and speed for the spell
915     duration & modifier: Bonus to creatures hp.
916     dam & modifer: Adjust to damage the golem does.
917    
918     SP_LIGHT (42)
919     Arguably, such a basic spell wouldn't seem to need its own subtype.
920     However, looking at the other spells, it really didn't fit in
921     very well elsewhere - the magic_wall code passes most of its
922     parameters to the object it creates. Something like summon_monster
923     doesn't work, because it wants a free space to put the object.
924     And while it would be nice to somehow merge create food, create
925     missile, and this, they are sufficiently different that they don't
926     work very well. So instead, I try to abstract this as much
927     as I can.
928    
929     attacktype: If set, and there is a monster on the target
930     space, the monster gets hit with the attacktype and the
931     damage setting. If this happens, the spell progresses no
932     further.
933     dam: As per note above, how much damage this does.
934    
935     other_arch: Object to place on the map.
936     duration: set the the 'food' value in the created object -
937     if is_used_up is set in the arch, this is how long the
938     spell lasts for.
939     range: If the created object has a glow radius, range
940     is used to replace it. In this way, we don't make non
941     glowing objects glow, but do make ones that do glow
942     glow brighter.
943    
944     SP_CHANGE_MAP_LIGHT (43)
945     This changes the light level on the map. There is only one
946     tunable:
947    
948     dam: amount to change the lightlevel. This is passed to
949     change_map_light, as such, negative values are lighter,
950     positive is darker
951    
952     SP_FAERY_FIRE (44)
953     Faery fire makes creatures within the area of effect glow.
954     This code uses the cast_destruction routine, but just handles
955     what happens when it finds a valid target.
956    
957     range (& modifier): Number of spaces in each direction to do damage to.
958     duration & modifier: Potency of the spell - determines how long the
959     creature will glow for (in 10's of ticks)
960     other_arch: This can in practice be anything, but is typically just used
961     as an effect to show what spaces where hit.
962    
963     Note: As converted to a spell object, this is now usuable by monsters.
964     The rule for what is damaged is basically this:
965     If cast by a player/friendly creature, damages non players/non friendlies.
966     If cast by a monster (non friendly), damages players/friendlies.
967    
968     SP_DISEASE (45)
969     disease spells infect players with a harmful disease.
970    
971     range (& modifier): How far to look in the line for matching
972     targets.
973     other_arch: Disease to infect the target with.
974     duration_modifier: This is used to adjust the disease stats
975     in several ways:
976     wc += mod/2
977     magic += mod / 4
978     maxhp, maxgrace += mod
979    
980     dam_modifier: Modifiers other aspects of the disease:
981     dam, maxsp, ac, last_eat, hp, sp: modified by full mod
982     last_sp: modifier by mod * 2
983    
984     The disease code treats these modified values in its own way.
985    
986    
987     SP_AURA (46):
988     Auras create fields around the players that effect anyone that steps
989     into them.
990    
991     other_arch: aura type to insert
992     duration: How long the aura lasts for. For this spell, each
993     duration_modifier is 10 ticks.
994     dam & modifier: How much damage the aura does.
995     attacktype: Attacktype of the aura.
996    
997     SP_TOWN_PORTAL (47):
998     This creates two linked portals which the player can use to get
999     back and forth quickly.
1000    
1001     other_arch: Name of the force object to use to mark the first portal
1002     target location (town_portal).
1003     race: Name of the object used to mark where the portals goe
1004     (town_portal_active)
1005     slaying: Name of the object used for the actual exit objects
1006     (town_portal_magic)
1007    
1008     Note the spell otherwise doesn't have any tunables.
1009     It should be noted that if different archetypes were made it,
1010     it should be possible to have multiple town portal type spells that
1011     lead to different destinations.
1012    
1013    
1014     Old values:
1015     hp: duration
1016     exp: range
1017     maxhp: set to a ->count variable, so spells can be uniquely identified.
1018    
1019     ------------------------------------------------------------------------------
1020     5. Spell Casting Objects
1021    
1022     As described in section 2 above, objects that cast spells (wands, rods,
1023     scrolls, etc) contain the spell they cast in their inventory. When the player
1024     uses the object, the code looks for an object in the inventory, and uses that
1025     as the type of spell to cast.
1026    
1027     Treasure lists are used to determine what spell goes in the object. Thus,
1028     what spells show up in the objects is determined purely by the treasure lists,
1029     and unique lists can be pade for potions, scrolls, wands, horns, and even
1030     different lists for heavy and light rods.
1031    
1032     The value of the finished object is the value field in the spell object
1033     multiplied by the value object in the original object (rod, wand, scroll).
1034    
1035     For items that come in different levels, the value is also adjusted based on
1036     the level of the object based on the difference of level. The
1037     code for this is in common/treasure.c
1038    
1039     The nrof field for the treasurelists for these objects have special meanings -
1040     since the spell objects are invisible objects within the spell casting object,
1041     the nrof field has no actual meaning. However, we borrow that meaning for use
1042     in the parent object.
1043    
1044     For wands, nrof is used for the number of charges the item has.
1045     For scrolls, nrof is the number of scrolls to make. This overrides the
1046     nrof value for the scroll itself - this allows for fine tuning number
1047     of scrolls that show up for different spells.
1048    
1049     RODS/HORNS:
1050     ----------
1051     hp is the amount of 'energy' the rod currently has. when a spell is
1052     cast, hp is reduced by the amount of sp/grace the spell takes up.
1053     speed: how often the rod recharges. There used to be a much more complicated
1054     way of of regenerating charges. Instead, each time a rod activates,
1055     it regenerates 10% of its total power. Thus, a rod of speed 1.0 would
1056     fully recharge in 10 ticks, a rod with speed 0.1 would fully recharge in 100
1057     ticks.
1058    
1059     This change in the way rods recharge now mean the speed of a rod can
1060     be set in a map (or elsewhere), and that change would stick.
1061    
1062     Within the archetype itself, the maxhp value determines the number of
1063     spells the rod can hold before it needs to recharge again.
1064    
1065     POTIONS/DUSTS:
1066     --------------
1067     potions and dusts (which were really just potions with a is_dust flag set)
1068     have been redone in several ways.
1069    
1070     First, potions had varying meanings for the same archetype. You could
1071     have potions that improve stats permenantly, ones that cast spells,
1072     and dust.
1073    
1074    
1075     There is now a SPELL_POTION (116) type. This is used for potions that
1076     ast spells. These type of potions really never should have been the
1077     same type in the first place - other than name, they really had
1078     none of the same code.
1079    
1080    
1081     FIREWALL (62)
1082     ----------------------------
1083     These objects are very basic - they cast a spell whenever they activate.
1084     If they have a spell object in their inventory
1085     (must be first item), that is the spell that is cast. Otherwise, they
1086     cast what other_arch points to.
1087    
1088     Firewalls can be activated by buttons, and can also cast spells in specific
1089     directions. The direction the firewalls fire in is stored in the 'sp' field
1090     of the firewall.
1091    
1092     Note that FIRECHEST (61) got folded into FIREWALLS, because functionally,
1093     they were identical - just set 'sp 0' in the firechest, and it fires
1094     in a random direction.
1095    
1096     ------------------------------------------------------------------------------
1097     6. Arch Directory Layout
1098    
1099     This section describes the basic layout of the archetypes in the arch
1100     directory. This explanation is here to try and prevent confusion (where
1101     should this arch go), where would I find an arch, etc.
1102    
1103     I thought about this a bit - would it be better to organize spells by
1104     attacktype (eg, all fire spells together, all cold spells, etc), or by type of
1105     spell (bolt spells, bullet spells, cone spells, etc).
1106    
1107     I think both methods have valid reasons for and against them. I decided to do
1108     it by spell type because I think it will make it easier to compare spells.
1109    
1110     For example, if one bolt spell does 20 damage, and another does 30 damage,
1111     even if by another attacktype, pretty easy to see that the later is more
1112     potent.
1113    
1114     This also organizes the spells more by their subtype, which is the more
1115     standard way the arch's have been done in the past. It makes for designing
1116     new spells much easier (you'd just copy a starter arch from the same
1117     directory, and not need to hunt for another one - imagine something like
1118     acid bolt).
1119    
1120     That said, the organization (all relative to the arch top level directory)
1121    
1122     magic: This directory goes away. There are many things that are magical
1123     that are not spells, so having a directory named magic is IMO not the
1124     best of name:
1125    
1126     spell: top level directory. This directory is for the spell archetypes,
1127     and is not meant to contain non related spell code. thus, the
1128     pentagram (actually a teleporter), and the weapon improver scrolls
1129     (not really in any way related to spells) would get relocated.
1130    
1131     Bolt: Contains the bolt spells
1132     Bullet: Bullet spells.
1133     Common: Contains objects that are related to spells in many areas,
1134     eg, the burnout is used by many types of spells, and things like
1135     a flaming square or icy square are used for cone, bolt, and
1136     exploding ball spells - those would be located here.
1137     Cone: Contains cone spells
1138     Healing: healing spells
1139     Potions: Contain the various potions.
1140     SeekingBall: spells like ball lightning
1141     Spellbook: spellbook/prayerbook objects.
1142     Wand: Contain the wand, staff, rod archetypes.
1143    
1144     There are almost certainly sub types I'm missing that I'll have to fill in.
1145     The idea here is to try to sketch something out that gives me a working
1146     layout to fill things in.
1147    
1148     Within each of the spell subtype directories, the entries for the spell
1149     information would be needed. And example below:
1150    
1151     spell_lightning_bolt.arc: This is the spell object that goes in the player/
1152     monster inventory that says they know the lightning bolt spell. As
1153     per other documentation, this also contains things like the skill needed
1154     to use this spell, spell point cost, level cost, etc.
1155    
1156     lightning_bolt.arc: this is the other_arch of the spell_lightning_bolt.arc.
1157     Few values in this are actually used - most of the values come from
1158     the parent arc. However, this (lightning_bolt.arc) contains the
1159     information like what the animation for the spell look like.
1160    
1161     lightning_bolt.base.111.png (and so on) are the images used by the
1162     lightning_bolt.arc arch.
1163    
1164     In the case of subtype directories with lots of entries, it is likely that the
1165     directories may then get broken up by things like attacktype of the spells.
1166    
1167     ------------------------------------------------------------------------------
1168     7. PROGRAMMING NOTES
1169    
1170     The number of top level object types is reduced - instead, many are now
1171     SPELL_EFFECT, with the subtype being the same as the spell that created
1172     them.
1173    
1174     The server/time.c still has a dispatch for the SPELL_EFFECT, but it
1175     is in server/spell_util.c which determines how each subtype should
1176     be handled.
1177    
1178     I try to keep all the same spell related code together, eg, put the
1179     code that casts the cone as well as moves the cone in the same file
1180     next to each other. This should reduce bugs - if someone changes
1181     one piece, they are more likely to notice the other piece and also update
1182     that. This is better than having the function in a completely different
1183     file.
1184    
1185     spell_util.c really only contains very general code - dispatch routines,
1186     funcitons to adjust spells, etc. The actual work is done in either
1187     spell_attack.c, spell_effect.c, rune.c, or pets.c.
1188    
1189     basically all the defines are in include/spells.h. This is a much simpler
1190     file than once was here. Remember, all the data now comes from the
1191     archetypes.
1192    
1193     ------------------------------------------------------------------------------
1194     8. ABILITIES
1195    
1196     In the old code, abilities had some special meaning in terms of what
1197     spells the monster would cast.
1198    
1199     In the new system, abilities are no different than spells, and use the
1200     same type/subtype.
1201    
1202     Abilities may still be seperate for a few reasons: 1) monsters are not
1203     likely to have all the needed skills. 2) sp/grace costs may be
1204     different. 3) Many abilities shouldn't add attacktype magic. 4) Abilities
1205     generally have a very fast casting time, since monsters move slower.
1206    
1207     It should be noted that many creatures just use the spell, and not
1208     the ability. Only some spells have ability counterparts.
1209    
1210     Note: Before giving spell abilities to monsters, be sure that the monster
1211     will actually use them - the code in monster.c results in monsters only
1212     casting spells of certain subtypes.
1213    
1214     maxsp: This increased the likelihood of monster choosing the spell.
1215     (eg, maxsp 3 vs maxsp 1 would mean 3 times as likely). This should
1216     instead by done in the treasurelist, so that more of that ability
1217     is created.
1218    
1219     hp/sp: Index for the spell that is used. One was 'short' range vs
1220     long range.