Basic portal spell using light ball as an object

spell_list.hpp 97:
SPELL (spell_portal)

spells.cpp 1154:
void Character::spell_portal (int sn, int lvl, void *vo)
{
  Character *victim;
 
  if ((victim = get_char_world (target_name)) == NULL
  || victim == this
  || victim->in_room == NULL // || in_room == victim->in_room
  || IS_SET (victim->in_room->room_flags, ROOM_SAFE)
  || IS_SET (victim->in_room->room_flags, ROOM_PRIVATE)
  || IS_SET (victim->in_room->room_flags, ROOM_SOLITARY)
  || IS_SET (victim->in_room->room_flags, ROOM_NO_RECALL)
  || victim->level >= lvl + 3
  || victim->fighting != NULL
  || victim->in_room->area != in_room->area
  || (victim->is_npc () && victim->saves_spell (lvl))) {
    send_to_char ("You failed.\r\n");
    return;
  }
 
  Object *portal;
  portal = get_obj_index(OBJ_VNUM_LIGHT_BALL)->create_object(0);
  portal->value[0] = victim->in_room->vnum;
  portal->timer = 1;
  portal->obj_to_room (in_room);
  act ("$n gazes and $p appears.", portal, NULL, TO_ROOM);
  act ("You gaze and $p appears.", portal, NULL, TO_CHAR);
 
  Object *portal2;
  portal2 = get_obj_index(OBJ_VNUM_LIGHT_BALL)->create_object(0);
  portal2->value[0] = in_room->vnum;
  portal2->timer = 1;
  portal2->obj_to_room (victim->in_room);
  victim->send_to_char ("A portal appears for you.\r\n");
  victim->act ("$p appears.", portal2, NULL, TO_ROOM);
  return;
}

cmd_list.hpp 185:
COMMAND (do_enter)

commands.cpp 5382:
void Character::do_enter (std::string argument)
{
  std::string arg;

  one_argument (argument, arg);
 
  if (arg.empty()) {
    send_to_char ("Enter what?\r\n");
    return;
  }

  if (fighting != NULL) {
    send_to_char ("You're fighting!\r\n");
    return;
  }

  if (!str_cmp (argument, "portal")) {
    ObjIter o;
    for (o = in_room->contents.begin(); o != in_room->contents.end(); o++) {
      if (can_see_obj(*o) && (*o)->item_type == ITEM_LIGHT && (*o)->value[0] != 0) {
        send_to_char("You enter a portal.\r\n");
        act ("$n enters a portal.", NULL, NULL, TO_ROOM);
        char_from_room();
        char_to_room(get_room_index((*o)->value[0]));
        act ("$n comes through a portal.", NULL, NULL, TO_ROOM);
        do_look ("auto");
        return;
      }
    }
  }

  send_to_char ("There is no portal here.\r\n");
  return;
}

murk.cpp 449:
  {"enter", &Character::do_enter, POS_STANDING, 0},

706:
  {   "portal", {1, 1, 1, 1},
      &Character::spell_portal, TAR_IGNORE, POS_STANDING,
      1, 12, "", "!Portal!"},