---- Begin "resurrect" First, stick this into your limbo.are: #MOBOLD #1 zombie~ a zombie~ A zombie is here, slaving away for its master. ~ This zombie has a blank look on its face. Rest assured, it wouldn't stir if you held a knife to its throat. ~ 2 0 0 S 0 0 0 0d0+0 0d0+0 0 0 8 8 0 #0 The mob is old format because otherwise I'd have to reassign the damage for it... something I really didn't feel like doing, since I couldn't come up with a decent formula. If it's old format damage is simply calculated by level. Stick this in merc.h among the mob vnums: #define MOB_VNUM_ZOMBIE 1 In magic.h, among the DECLARE_SPELL_FUN's: DECLARE_SPELL_FUN( spell_resurrect ); In const.c, in the skill_table: { "resurrect", { 53, 53, 53, 53 }, { 1, 1, 2, 2}, spell_resurrect, TAR_IGNORE, POS_STANDING, NULL, SLOT(xxx), 100, 15, "", "!Resurrect!", "", }, Of course, you will want to lower the levels and change SLOT(xxx) to a free spell slot. And now, the spell function... stick this in magic.c: void spell_resurrect( int sn, int level, CHAR_DATA *ch, void *vo,int target) { OBJ_DATA *obj; CHAR_DATA *mob; int i; obj = get_obj_here( ch, target_name ); if ( obj == NULL ) { send_to_char( "Resurrect what?\n\r", ch ); return; } /* Nothing but NPC corpses. */ if( obj->item_type != ITEM_CORPSE_NPC ) { if( obj->item_type == ITEM_CORPSE_PC ) send_to_char( "You can't resurrect players.\n\r", ch ); else send_to_char( "It would serve no purpose...\n\r", ch ); return; } if( obj->level > (ch->level + 2) ) { send_to_char( "You couldn't call forth such a great spirit.\n\r", ch ); return; } if( ch->pet != NULL ) { send_to_char( "You already have a pet.\n\r", ch ); return; } /* Chew on the zombie a little bit, recalculate level-dependant stats */ mob = create_mobile( get_mob_index( MOB_VNUM_ZOMBIE ) ); mob->level = obj->level; mob->max_hit = mob->level * 8 + number_range( mob->level * mob->level/4, mob->level * mob->level); mob->max_hit *= .9; mob->hit = mob->max_hit; mob->max_mana = 100 + dice(mob->level,10); mob->mana = mob->max_mana; for (i = 0; i < 3; i++) mob->armor[i] = interpolate(mob->level,100,-100); mob->armor[3] = interpolate(mob->level,100,0); for (i = 0; i < MAX_STATS; i++) mob->perm_stat[i] = 11 + mob->level/4; /* You rang? */ char_to_room( mob, ch->in_room ); act( "$p springs to life as a hideous zombie!", ch, obj, NULL, TO_ROOM ); act( "$p springs to life as a hideous zombie!", ch, obj, NULL, TO_CHAR ); extract_obj(obj); /* Yessssss, massssssster... */ SET_BIT(mob->affected_by, AFF_CHARM); SET_BIT(mob->act, ACT_PET); mob->comm = COMM_NOTELL|COMM_NOSHOUT|COMM_NOCHANNELS; add_follower( mob, ch ); mob->leader = ch; ch->pet = mob; /* For a little flavor... */ do_say( mob, "How may I serve you, master?" ); return; } That's it! Feel free to use it as you please... a little credit somewhere would be nice, but not necessary. Oh, and any improvements (*beam*) or bugs (*cringe*), please write to aprocter@mail.coin.missouri.edu. --Dribble ---- End "resurrect"