--- deliantra/server/server/spell_attack.C 2007/05/28 21:28:36 1.37
+++ deliantra/server/server/spell_attack.C 2007/08/15 18:06:32 1.47
@@ -5,19 +5,18 @@
* Copyright (©) 2002-2003,2007 Mark Wedel & Crossfire Development Team
* Copyright (©) 1992,2007 Frank Tore Johansen
*
- * Crossfire TRT is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option)
- * any later version.
+ * Crossfire TRT is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
*
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * for more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
*
- * You should have received a copy of the GNU General Public License along
- * with Crossfire TRT; if not, write to the Free Software Foundation, Inc. 51
- * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
*
* The authors can be reached via e-mail to
*/
@@ -339,8 +338,6 @@
return 1;
}
-
-
/***************************************************************************
*
* BULLET/BALL CODE
@@ -348,7 +345,7 @@
***************************************************************************/
/* expands an explosion. op is a piece of the
- * explosion - this expans it in the different directions.
+ * explosion - this expands it in the different directions.
* At least that is what I think this does.
*/
void
@@ -392,7 +389,6 @@
}
}
-
/* Causes an object to explode, eg, a firebullet,
* poison cloud ball, etc. op is the object to
* explode.
@@ -489,6 +485,8 @@
op->move_on = 0;
tmp->insert_at (op, op);
+ tmp->play_sound (tmp->sound);
+
/* remove the firebullet */
op->destroy ();
}
@@ -614,7 +612,6 @@
* This function sets up the appropriate owner and skill
* pointers.
*/
-
int
fire_bullet (object *op, object *caster, int dir, object *spob)
{
@@ -822,7 +819,7 @@
* to create is, so we can know if the space we are about to
* insert it into is blocked.
*/
- movetype = spell->other_arch->clone.move_type;
+ movetype = spell->other_arch->move_type;
for (i = range_min; i <= range_max; i++)
{
@@ -911,10 +908,10 @@
}
if (!(tmp->move_type & MOVE_FLY_LOW))
- LOG (llevDebug, "cast_cone(): arch %s doesn't have flying 1\n", &spell->other_arch->name);
+ LOG (llevDebug, "cast_cone(): arch %s doesn't have flying 1\n", &spell->other_arch->archname);
if (!tmp->move_on && tmp->stats.dam)
- LOG (llevDebug, "cast_cone(): arch %s doesn't have move_on set\n", &spell->other_arch->name);
+ LOG (llevDebug, "cast_cone(): arch %s doesn't have move_on set\n", &spell->other_arch->archname);
m->insert (tmp, sx, sy, op);
@@ -936,7 +933,6 @@
*
****************************************************************************/
-
/* This handles an exploding bomb.
* op is the original bomb object.
*/
@@ -1049,7 +1045,6 @@
* type is the type of spell - either SPELL_MANA or SPELL_GRACE.
* this info is used for blocked magic/unholy spaces.
*/
-
object *
get_pointed_target (object *op, int dir, int range, int type)
{
@@ -1078,20 +1073,14 @@
return NULL;
if (mflags & P_IS_ALIVE)
- {
- for (target = GET_MAP_OB (mp, x, y); target; target = target->above)
- {
- if (QUERY_FLAG (target->head ? target->head : target, FLAG_MONSTER))
- {
- return target;
- }
- }
- }
+ for (target = GET_MAP_OB (mp, x, y); target; target = target->above)
+ if (QUERY_FLAG (target, FLAG_MONSTER))
+ return target;
}
+
return NULL;
}
-
/* cast_smite_arch() - the priest points to a creature and causes
* a 'godly curse' to decend.
* usual params -
@@ -1100,7 +1089,6 @@
* dir = direction being cast
* spell = spell object
*/
-
int
cast_smite_spell (object *op, object *caster, int dir, object *spell)
{
@@ -1188,7 +1176,6 @@
return 1;
}
-
/****************************************************************************
*
* MAGIC MISSILE code.
@@ -1268,17 +1255,14 @@
* make this work for non-living objects, we would have to
* give them the capability to have an inventory. b.t.
*/
-
int
make_object_glow (object *op, int radius, int time)
{
- object *tmp;
-
/* some things are unaffected... */
if (op->path_denied & PATH_LIGHT)
return 0;
- tmp = get_archetype (FORCE_NAME);
+ object *tmp = get_archetype (FORCE_NAME);
tmp->speed = 0.01;
tmp->stats.food = time;
SET_FLAG (tmp, FLAG_IS_USED_UP);
@@ -1286,19 +1270,11 @@
if (tmp->glow_radius > MAX_LIGHT_RADII)
tmp->glow_radius = MAX_LIGHT_RADII;
- tmp->x = op->x;
- tmp->y = op->y;
- if (tmp->speed < MIN_ACTIVE_SPEED)
- tmp->speed = MIN_ACTIVE_SPEED; /* safety */
tmp = insert_ob_in_ob (tmp, op);
+
if (tmp->glow_radius > op->glow_radius)
op->glow_radius = tmp->glow_radius;
- if (!tmp->env || op != tmp->env)
- {
- LOG (llevError, "make_object_glow() failed to insert glowing force in %s\n", &op->name);
- return 0;
- }
return 1;
}
@@ -1399,8 +1375,10 @@
return 0;
}
+ tmp = tmp->head_ ();
+
/* If we've already got a force of this type, don't add a new one. */
- for (force = tmp->inv; force != NULL; force = force->below)
+ for (force = tmp->inv; force; force = force->below)
{
if (force->type == FORCE && force->subtype == FORCE_CHANGE_ABILITY)
{
@@ -1416,10 +1394,11 @@
}
}
- if (force == NULL)
+ if (!force)
{
force = get_archetype (FORCE_NAME);
force->subtype = FORCE_CHANGE_ABILITY;
+
if (spell_ob->race)
force->name = spell_ob->race;
else
@@ -1439,11 +1418,11 @@
new_draw_info (NDI_UNIQUE, 0, op, "You recast the spell while in effect.");
}
else
- {
- new_draw_info (NDI_UNIQUE, 0, op, "Recasting the spell had no effect.");
- }
+ new_draw_info (NDI_UNIQUE, 0, op, "Recasting the spell had no effect.");
+
return 1;
}
+
force->duration = spell_ob->duration + SP_level_duration_adjust (caster, spell_ob) * 50;
force->speed = 1.f;
force->speed_left = -1.f;
@@ -2101,7 +2080,7 @@
new_draw_info_format (NDI_UNIQUE, 0, op, "You inflict %s on %s!", &disease->name, &walk->name);
disease->destroy (); /* don't need this one anymore */
- walk->map->insert (get_archetype (ARCH_DETECT_MAGIC), x, y, op);
+ walk->map->insert (get_archetype ("detect_magic"), x, y, op);
return 1;
}