add to spells.h the standard SPELL_SPECTRAL_WIZARD ?? Then in spec_procs.c add in the standard: SPECIAL(spectral_wizard); Also in spec_assign.c add in the standard: SPECIAL(spectral_wizard); ASSIGNMOB(11, spectral_wizard); Then very important you must add this small section to magic.c function mag_summons: after the case statement for spell_clone and right before the handling of a corpse: if (ch->master && IS_AFFECTED(ch, AFF_CHARM)) add_follower(mob, ch->master); else add_follower(mob, ch); THen add this special procedure which is the heart of love for this spell: SPECIAL(spectral_wizard) { struct obj_data *obj, *next_obj; struct char_data *vict = ch->master; if (cmd || !ch->master || !(ch->master->in_room == ch->in_room)) return (0); switch (number(1, 7)) { case 1: do_say(ch, "My master I am here to serve thee!", 0, 0); return (1); break; case 2: do_say(ch, "My magic is finite as is my existence.", 0, 0); return (1); break; case 3: do_say(ch, "I am here to serve at my masters whim.", 0, 0); return (1); break; case 4: do_say(ch, "In serving my master I am completing myself.", 0, 0); return (1); break; case 5: if (GET_HIT(vict) < GET_MAX_HIT(vict) / 2) { cast_spell(ch, vict, NULL, SPELL_LIFE_TRANSFER); do_say(ch, "My life is my masters!!!.", 0, 0); } else do_say(ch, "Your lifeforce inspires me!!", 0, 0); return(1); break; case 6: if (GET_MANA(vict) < GET_MAX_MANA(vict) / 2) { do_say(ch, "My magic is my masters!!!", 0, 0); cast_spell(ch, vict, NULL, SPELL_MANA_TRANSFER); } else do_say(ch, "Your magic keeps me in awe my master!", 0, 0); return(1); break; case 7: for (obj = world[ch->in_room].contents; obj; obj = next_obj) { next_obj = obj->next_content; if (IS_CORPSE(obj)) cast_spell(ch, NULL, obj, SPELL_ANIMATE_DEAD); } return(1); break; default: do_say(ch, "Master I am having difficulties. Consult the ghods!", 0, 0); return (1); } /* end switch */ } /* This spell very easily fits into a mag_summons so if you prefer spells that way by all means import it there */ #define MOB_SPECTRAL_WIZARD 15 ASPELL(spell_spectral_wizard) { int i; struct char_data *mob = NULL; if (mag_savingthrow(victim, SAVING_SPELL)) { send_to_char("Your spell is resisted.", ch); act("$N glows an eery blue and thrashes wildly in torment!", FALSE, ch, 0, 0, TO_ROOM); act("You feel a wild surge of necromantic energy attempt\r\nto twist your form but you resist.\r\n", FALSE, ch, 0,victim, TO_VICT); return; } else if (GET_HIT(victim) < 20 && (!GET_MAX_HIT(victim) > GET_HIT(victim))) { send_to_char("This life force is too strong, destroy it a little", ch); return; } else if (!GET_CLASS(victim) == CLASS_MAGIC_USER) /* if you dont have npc classes make this IS_MAGIC_USER(ch) { send_to_char("Your victim is not a magic-user, go find one and try again!", ch); return; } else if (GET_RACE(victim) == RACE_HUMAN || GET_RACE(victim) == RACE_ELF) /* Get rid of this if you dont have races */ { mob = read_mobile(MOB_SPECTRAL_WIZARD, VIRTUAL); char_to_room(mob, victim->in_room); IS_CARRYING_W(mob) = 1000; IS_CARRYING_N(mob) = 1000; GET_LEVEL(mob) = GET_LEVEL(victim); GET_MAX_HIT(mob) = GET_MAX_HIT(victim); GET_HIT(mob) = GET_MAX_HIT(victim); GET_MAX_MANA(mob) = GET_MAX_MANA(victim) + 10; GET_MANA(mob) = GET_MAX_MANA(mob); SET_BIT(AFF_FLAGS(mob), AFF_CHARM); add_follower(mob, ch); die(victim); } } Purpose: This spell is WICKED and maybe I will alter it to give a second saving throw or some other way of saving ones self from it via a special protection spell but in the meantime this spell is used when wizards duel and the enemy is almost dead and he attacking wizard wants to attempt this devastating attack! It changes the victim mage into a spectral wizard which then casts spells and assists its master by draining its own life force and mana to aid its master. If you don't have a version of the mana transfer or life transfer spell in your game then see my listing for those spells on this page. The spectral wizard will animate all bodies in a room if its case statement is activated and they will then be followers of the mage even if he doesn't know the animate dead spell. I recommend you treat the spectral wizard as a spell effect and have it lose power and die as it moves about but I did not include that extensive code just for this spell. Justin P.