void do_circle (CHAR_DATA * ch, char *argument)
{
  char arg[MAX_INPUT_LENGTH];
  CHAR_DATA *victim;
  OBJ_DATA *obj;
  OBJ_DATA *wield1;
  OBJ_DATA *wield2;
  OBJ_DATA *wield3;
  OBJ_DATA *wield4;
  OBJ_DATA *wield5;
  OBJ_DATA *wield6;

  one_argument (argument, arg);


  if (!IS_NPC (ch))
  {
  if (!IS_NINJA (ch) && !IS_ASSASSIN (ch))
  {
    send_to_char ("#cCircle can only be mastered by Ninjas and Assassins.#n\n\r", ch);
    return;
  }

  if (!IS_ASSASSIN (ch) && IS_NINJA (ch) && ch->pcdata->powers[NPOWER_NINGENNO] < 6)
  {
    send_to_char ("#cCircle is a Ninja level 6 Ningenno Command#n\n\r", ch);
    return;
  }

  if ((victim = get_char_room (ch, arg)) == NULL)
  {
    if (ch->fighting == NULL)
    {
      send_to_char ("They aren't here.\n\r", ch);
      return;
    }
    else
      victim = ch->fighting;
  }
  if (victim == ch)
  {
    send_to_char ("How can you circle yourself?\n\r", ch);
    return;
  }
  if (is_safe (ch, victim))
    return;

  wield1 = get_eq_char( ch, WEAR_WIELD );
  wield2 = get_eq_char( ch, WEAR_HOLD );
  wield3 = get_eq_char( ch, WEAR_THIRD );
  wield4 = get_eq_char( ch, WEAR_FOURTH);
  wield5 = get_eq_char(ch, WEAR_TWO_HANDED);
  wield6 = get_eq_char(ch, WEAR_TWO_HANDED2);

 if (wield1 != NULL && (wield1->value[3] == 11
	|| wield1->value[3] == 6 || wield1->value[3] == 18))
{
     one_hit(ch, victim, gsn_circle, 1,0);
     check_improve(ch, gsn_circle,TRUE,1);
     if (number_percent() <= ch->pcdata->learned[gsn_dual_circle])
     one_hit(ch, victim, gsn_dual_circle, 1,0);
     if (ch->pcdata->learned[gsn_dual_circle] > 0)
     check_improve(ch,gsn_dual_circle,TRUE,1);
}

 if (wield2 != NULL && (wield2->value[3] == 11
	|| wield2->value[3] == 6 || wield2->value[3] == 18))
{
     one_hit(ch, victim, gsn_circle, 1,0);
     check_improve(ch, gsn_circle,TRUE,1);
     if (number_percent() <= ch->pcdata->learned[gsn_dual_circle])
     one_hit(ch, victim, gsn_dual_circle, 1,0);
     if (ch->pcdata->learned[gsn_dual_circle] > 0)
     check_improve(ch,gsn_dual_circle,TRUE,1);
}

 if (wield3 != NULL && (wield3->value[3] == 11
	|| wield3->value[3] == 6 || wield3->value[3] == 18))
{
     one_hit(ch, victim, gsn_circle, 1,0);
     check_improve(ch, gsn_circle,TRUE,1);
     if (number_percent() <= ch->pcdata->learned[gsn_dual_circle])
     one_hit(ch, victim, gsn_dual_circle, 1,0);
     if (ch->pcdata->learned[gsn_dual_circle] > 0)
     check_improve(ch,gsn_dual_circle,TRUE,1);
}

 if (wield4 != NULL && (wield4->value[3] == 11
	|| wield4->value[3] == 6 || wield4->value[3] == 18))
{
     one_hit(ch, victim, gsn_circle, 1,0);
     check_improve(ch, gsn_circle,TRUE,1);
     if (number_percent() <= ch->pcdata->learned[gsn_dual_circle])
     one_hit(ch, victim, gsn_dual_circle, 1,0);
     if (ch->pcdata->learned[gsn_dual_circle] > 0)
     check_improve(ch,gsn_dual_circle,TRUE,1);
}

 if (wield5 != NULL && (wield5->value[3] == 11
	|| wield5->value[3] == 6 || wield5->value[3] == 18))
{
     one_hit(ch, victim, gsn_circle, 1,0);
     check_improve(ch, gsn_circle,TRUE,1);
     if (number_percent() <= ch->pcdata->learned[gsn_dual_circle])
     one_hit(ch, victim, gsn_dual_circle, 1,0);
     if (ch->pcdata->learned[gsn_dual_circle] > 0)
     check_improve(ch,gsn_dual_circle,TRUE,1);
}

 if (wield6 != NULL && (wield6->value[3] == 11
	|| wield6->value[3] == 6 || wield6->value[3] == 18))
{
     one_hit(ch, victim, gsn_circle, 1,0);
     check_improve(ch, gsn_circle,TRUE,1);
     if (number_percent() <= ch->pcdata->learned[gsn_dual_circle])
     one_hit(ch, victim, gsn_dual_circle, 1,0);
     if (ch->pcdata->learned[gsn_dual_circle] > 0)
     check_improve(ch,gsn_dual_circle,TRUE,1);
}

}
else if (IS_NPC(ch))
{
     one_hit(ch, victim, gsn_circle, 1,0);
     one_hit(ch, victim, gsn_circle, 1,0);
     one_hit(ch, victim, gsn_circle, 1,0);
     one_hit(ch, victim, gsn_circle, 1,0);
     one_hit(ch, victim, gsn_circle, 1,0);
}

  WAIT_STATE (ch, 12);
  return;
}