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.

Reply via email to