| 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. |