Ok, from all the information I've received, here's the new information
that I have on spells in pl7:
bless - Did not work on objects, patch below fixes this. As per past
versions of Circle, bless on an object has no effect other than setting
the ITEM_BLESS bit.
create water - Contrary to my previous statements, this has not been
coded. My patch does NOT implement this spell.
create food - As mentioned before, the spell works if a food item
is put in the proper zone file.
cure blindness - When cast on players, it looks like it doesn't work
because the caster does not receive a message, but it does work.
curse - Did not work on objects, the patch fixes this.
detect poison - Not implemented.
identify - Works if object file with scrolls is fixed.
poison - Did not work on objects. The patch fixes this.
protection from good/evil - Not implemented. Spell itself works, but the
fight routines ignore the flags so that it doesn't work.
remove curse - Patch modifies spell so that if cast on a cursed weapon,
the damage dice size is increased by one (curse lowers it by one). When
cast on players, the caster does not receive a message indicating if the
spell works.
remove poison - Did not work on objects. Patch fixes. When cast on players,
the caster does not receive a message indicating if the spell works.
And here's my patch... it only touches magic.c and spell_parser.c. If
there are any problems with this code, please let me know.
-Jeff
diff -c ../../oldpl7/magic.c ./magic.c
*** ../../oldpl7/magic.c Sun Apr 2 13:12:16 1995
--- ./magic.c Sun Apr 2 15:17:38 1995
***************
*** 969,974 ****
--- 969,989 ----
return;
switch (spellnum) {
+ case SPELL_BLESS:
+ if (!IS_OBJ_STAT(obj, ITEM_BLESS) &&
+ (GET_OBJ_WEIGHT(obj) <= 5 * GET_LEVEL(ch))) {
+ SET_BIT(GET_OBJ_EXTRA(obj), ITEM_BLESS);
+ to_char = "$p glows briefly.";
+ }
+ break;
+ case SPELL_CURSE:
+ if (!IS_OBJ_STAT(obj, ITEM_NODROP)) {
+ SET_BIT(GET_OBJ_EXTRA(obj), ITEM_NODROP);
+ if (GET_OBJ_TYPE(obj) == ITEM_WEAPON)
+ GET_OBJ_VAL(obj, 2)--;
+ to_char = "$p briefly glows red.";
+ }
+ break;
case SPELL_INVISIBLE:
if (!IS_OBJ_STAT(obj, ITEM_NOINVIS | ITEM_INVISIBLE)) {
SET_BIT(obj->obj_flags.extra_flags, ITEM_INVISIBLE);
***************
*** 975,984 ****
--- 990,1017 ----
to_char = "$p turns invisible.";
}
break;
+ case SPELL_POISON:
+ if (((GET_OBJ_TYPE(obj) == ITEM_DRINKCON) ||
+ (GET_OBJ_TYPE(obj) == ITEM_FOUNTAIN) ||
+ (GET_OBJ_TYPE(obj) == ITEM_FOOD)) && !GET_OBJ_VAL(obj, 3)) {
+ GET_OBJ_VAL(obj, 3) = 1;
+ to_char = "$p steams briefly.";
+ }
+ break;
case SPELL_REMOVE_CURSE:
if (IS_OBJ_STAT(obj, ITEM_NODROP)) {
REMOVE_BIT(obj->obj_flags.extra_flags, ITEM_NODROP);
+ if (GET_OBJ_TYPE(obj) == ITEM_WEAPON)
+ GET_OBJ_VAL(obj, 2)++;
to_char = "$p briefly glows blue.";
+ }
+ break;
+ case SPELL_REMOVE_POISON:
+ if (((GET_OBJ_TYPE(obj) == ITEM_DRINKCON) ||
+ (GET_OBJ_TYPE(obj) == ITEM_FOUNTAIN) ||
+ (GET_OBJ_TYPE(obj) == ITEM_FOOD)) && GET_OBJ_VAL(obj, 3)) {
+ GET_OBJ_VAL(obj, 3) = 0;
+ to_char = "$p steams briefly.";
}
break;
}
diff -c ../../oldpl7/spell_parser.c ./spell_parser.c
*** ../../oldpl7/spell_parser.c Sun Apr 2 13:12:17 1995
--- ./spell_parser.c Sun Apr 2 15:05:39 1995
***************
*** 768,774 ****
POS_FIGHTING, TAR_CHAR_ROOM, FALSE, MAG_AFFECTS);
spello(SPELL_BLESS, X, 5, X, X, 35, 5, 3,
! POS_STANDING, TAR_CHAR_ROOM, FALSE, MAG_AFFECTS);
spello(SPELL_BLINDNESS, 9, 6, X, X, 35, 25, 1,
POS_STANDING, TAR_CHAR_ROOM | TAR_NOT_SELF, FALSE, MAG_AFFECTS);
--- 768,774 ----
POS_FIGHTING, TAR_CHAR_ROOM, FALSE, MAG_AFFECTS);
spello(SPELL_BLESS, X, 5, X, X, 35, 5, 3,
! POS_STANDING, TAR_CHAR_ROOM | TAR_OBJ_INV, FALSE, MAG_AFFECTS | MAG_ALTER_OBJS);
spello(SPELL_BLINDNESS, 9, 6, X, X, 35, 25, 1,
POS_STANDING, TAR_CHAR_ROOM | TAR_NOT_SELF, FALSE, MAG_AFFECTS);
***************
*** 812,818 ****
POS_FIGHTING, TAR_CHAR_ROOM, FALSE, MAG_POINTS);
spello(SPELL_CURSE, 14, X, X, X, 80, 50, 2,
! POS_STANDING, TAR_CHAR_ROOM | TAR_OBJ_INV, TRUE, MAG_AFFECTS);
spello(SPELL_DETECT_ALIGN, X, 4, X, X, 20, 10, 2,
POS_STANDING, TAR_CHAR_ROOM | TAR_SELF_ONLY, FALSE, MAG_AFFECTS);
--- 812,818 ----
POS_FIGHTING, TAR_CHAR_ROOM, FALSE, MAG_POINTS);
spello(SPELL_CURSE, 14, X, X, X, 80, 50, 2,
! POS_STANDING, TAR_CHAR_ROOM | TAR_OBJ_INV, TRUE, MAG_AFFECTS | MAG_ALTER_OBJS);
spello(SPELL_DETECT_ALIGN, X, 4, X, X, 20, 10, 2,
POS_STANDING, TAR_CHAR_ROOM | TAR_SELF_ONLY, FALSE, MAG_AFFECTS);
***************
*** 875,887 ****
POS_FIGHTING, TAR_CHAR_ROOM | TAR_FIGHT_VICT, TRUE, MAG_DAMAGE);
spello(SPELL_POISON, X, X, X, X, 50, 20, 3,
! POS_STANDING, TAR_CHAR_ROOM | TAR_NOT_SELF | TAR_OBJ_INV, TRUE, MAG_AFFECTS);
spello(SPELL_PROT_FROM_EVIL, X, 8, X, X, 40, 10, 3,
POS_STANDING, TAR_CHAR_ROOM | TAR_SELF_ONLY, FALSE, MAG_AFFECTS);
spello(SPELL_REMOVE_CURSE, X, 26, X, X, 45, 25, 5,
! POS_STANDING, TAR_CHAR_ROOM | TAR_OBJ_INV, FALSE, MAG_UNAFFECTS);
spello(SPELL_SANCTUARY, X, 15, X, X, 110, 85, 5,
POS_STANDING, TAR_CHAR_ROOM, FALSE, MAG_AFFECTS);
--- 875,887 ----
POS_FIGHTING, TAR_CHAR_ROOM | TAR_FIGHT_VICT, TRUE, MAG_DAMAGE);
spello(SPELL_POISON, X, X, X, X, 50, 20, 3,
! POS_STANDING, TAR_CHAR_ROOM | TAR_NOT_SELF | TAR_OBJ_INV, TRUE, MAG_AFFECTS | MAG_ALTER_OBJS);
spello(SPELL_PROT_FROM_EVIL, X, 8, X, X, 40, 10, 3,
POS_STANDING, TAR_CHAR_ROOM | TAR_SELF_ONLY, FALSE, MAG_AFFECTS);
spello(SPELL_REMOVE_CURSE, X, 26, X, X, 45, 25, 5,
! POS_STANDING, TAR_CHAR_ROOM | TAR_OBJ_INV, FALSE, MAG_UNAFFECTS | MAG_ALTER_OBJS);
spello(SPELL_SANCTUARY, X, 15, X, X, 110, 85, 5,
POS_STANDING, TAR_CHAR_ROOM, FALSE, MAG_AFFECTS);
***************
*** 903,909 ****
POS_FIGHTING, TAR_CHAR_ROOM, FALSE, MAG_MANUAL);
spello(SPELL_REMOVE_POISON, X, 10, X, X, 40, 8, 4,
! POS_STANDING, TAR_CHAR_ROOM | TAR_OBJ_INV, FALSE, MAG_UNAFFECTS);
spello(SPELL_SENSE_LIFE, X, X, X, X, 20, 10, 2,
POS_STANDING, TAR_CHAR_ROOM | TAR_SELF_ONLY, FALSE, MAG_AFFECTS);
--- 903,909 ----
POS_FIGHTING, TAR_CHAR_ROOM, FALSE, MAG_MANUAL);
spello(SPELL_REMOVE_POISON, X, 10, X, X, 40, 8, 4,
! POS_STANDING, TAR_CHAR_ROOM | TAR_OBJ_INV | TAR_OBJ_ROOM, FALSE, MAG_UNAFFECTS | MAG_ALTER_OBJS);
spello(SPELL_SENSE_LIFE, X, X, X, X, 20, 10, 2,
POS_STANDING, TAR_CHAR_ROOM | TAR_SELF_ONLY, FALSE, MAG_AFFECTS);
This archive was generated by hypermail 2b30 : 12/07/00 PST