Here's a thought from a game I used to code:
void invoke_objprog(OBJ_DATA *obj, MPROG_CODE *pMcode, CHAR_DATA *ch)
{
CHAR_DATA *mobject;
mobject = create_mobile(get_mob_index(MOB_VNUM_OBJPROG));
mobject->level = obj->level;
free_string(mobject->short_descr);
mobject->short_descr = str_dup(obj->short_descr);
free_string(mobject->name);
mobject->name = str_dup(obj->name);
free_string(mobject->long_descr);
mobject->long_descr = str_dup("");
char_to_room(mobject, ch->in_room);
program_flow(pMcode->vnum, pMcode->code, mobject, ch, (void *)obj, 0);
extract_char(mobject, TRUE);
return;
}
Now the objprog *IS* a mobprog.
It's a little slow.. but it's probably the simplest way to make objprogs
and not worry about re-writing all of the functions that require a
pointer to a char.
Plus my sword could talk.
--Palrich.