diff -BbuprN -x '*.o' -x conf.h /home/zizazat/tmp/src/act.offensive.c /home/zizazat/circle/yoda/src/act.offensive.c --- /home/zizazat/tmp/src/act.offensive.c 2003-08-31 18:32:44.000000000 -0500 +++ /home/zizazat/circle/yoda/src/act.offensive.c 2004-01-18 17:47:30.000000000 -0600 @@ -654,3 +654,56 @@ ACMD(do_turn) } } +ACMD(do_circle) +{ + char buf[MAX_INPUT_LENGTH]; + struct char_data *vict; + int percent, prob; + + if (IS_NPC(ch) || !GET_SKILL(ch, SKILL_CIRCLE)) { + send_to_char(ch, "You have to know how to circle before you can circle someone.\r\n"); + return; + } + + one_argument(argument, buf); + + //allow player to circle without a target when fighting + if (!FIGHTING(ch)) { + send_to_char(ch, "You must be fighting someone to circle around behind them while fighting!!\r\n"); + return; + } else { + if (*buf == '\0') { + vict = FIGHTING(ch); + } + else if(!(vict = get_char_vis(ch, buf, NULL, FIND_CHAR_ROOM))) { + send_to_char(ch, "Circle behind who?\r\n"); + return; + } + if (vict == ch) { + send_to_char(ch, "How do you think you are going to circle behind yourself?\r\n"); + return; + } + if (!GET_EQ(ch, WEAR_WIELD)) { + send_to_char(ch, "You need to wield a weapon to do that!\r\n"); + return; + } + if (GET_OBJ_VAL(GET_EQ(ch, WEAR_WIELD), 3) != TYPE_PIERCE - TYPE_HIT) { + send_to_char(ch, "Only piercing weapons can be used for this type of attack.\r\n"); + return; + } + } + + percent = rand_number(1, 101); /* 101% is a complete failure */ + prob = GET_SKILL(ch, SKILL_CIRCLE); + + if (AWAKE(vict) && (percent > prob)) + damage(ch, vict, 0, SKILL_CIRCLE); + else + hit(ch, vict, SKILL_CIRCLE); + + if (percent < SG_MIN) + skill_gain(ch, SKILL_CIRCLE); + + WAIT_STATE(ch, 2 * PULSE_VIOLENCE); +} + diff -BbuprN -x '*.o' -x conf.h /home/zizazat/tmp/src/class.c /home/zizazat/circle/yoda/src/class.c --- /home/zizazat/tmp/src/class.c 2004-01-14 19:05:00.000000000 -0600 +++ /home/zizazat/circle/yoda/src/class.c 2004-01-18 17:52:06.000000000 -0600 @@ -1900,6 +1900,7 @@ void init_spell_levels(void) spell_level(SKILL_WP_STAFF, CLASS_THIEF, 3); spell_level(SKILL_WP_MACE, CLASS_THIEF, 4); spell_level(SKILL_WP_HAMMER, CLASS_THIEF, 5); + spell_level(SKILL_CIRCLE, CLASS_THIEF, 5); spell_level(SKILL_WP_AXE, CLASS_THIEF, 6); spell_level(SKILL_WP_SWORD_LONG, CLASS_THIEF, 7); spell_level(SKILL_WP_SPEAR, CLASS_THIEF, 8); diff -BbuprN -x '*.o' -x conf.h /home/zizazat/tmp/src/fight.c /home/zizazat/circle/yoda/src/fight.c --- /home/zizazat/tmp/src/fight.c 2004-01-17 10:12:33.000000000 -0600 +++ /home/zizazat/circle/yoda/src/fight.c 2004-01-18 17:49:45.000000000 -0600 @@ -1110,6 +1110,8 @@ void hit(struct char_data *ch, struct ch if (type == SKILL_BACKSTAB) damage(ch, victim, dam * backstab_mult(GET_LEVEL(ch)), SKILL_BACKSTAB); + else if (type == SKILL_CIRCLE) + damage(ch, victim, dam + GET_DEX(ch), SKILL_CIRCLE); else damage(ch, victim, dam, w_type); } diff -BbuprN -x '*.o' -x conf.h /home/zizazat/tmp/src/interpreter.c /home/zizazat/circle/yoda/src/interpreter.c --- /home/zizazat/tmp/src/interpreter.c 2004-01-16 21:23:22.000000000 -0600 +++ /home/zizazat/circle/yoda/src/interpreter.c 2004-01-18 17:40:29.000000000 -0600 @@ -90,6 +90,7 @@ ACMD(do_ban); ACMD(do_bash); ACMD(do_break); ACMD(do_cast); +ACMD(do_circle); ACMD(do_color); ACMD(do_compare); ACMD(do_copyover); @@ -314,6 +315,7 @@ cpp_extern const struct command_info cmd { "cast" , "c" , POS_SITTING , do_cast , 1, 0 }, { "cedit" , "cedit" , POS_DEAD , do_oasis , LVL_IMPL, SCMD_OASIS_CEDIT }, { "check" , "ch" , POS_STANDING, do_not_here , 1, 0 }, + { "circle" , "cir" , POS_SITTING , do_circle , 0, 0 }, { "clear" , "cle" , POS_DEAD , do_gen_ps , 0, SCMD_CLEAR }, { "close" , "cl" , POS_SITTING , do_gen_door , 0, SCMD_CLOSE }, { "cls" , "cls" , POS_DEAD , do_gen_ps , 0, SCMD_CLEAR }, diff -BbuprN -x '*.o' -x conf.h /home/zizazat/tmp/src/spell_parser.c /home/zizazat/circle/yoda/src/spell_parser.c --- /home/zizazat/tmp/src/spell_parser.c 2003-11-29 09:37:11.000000000 -0600 +++ /home/zizazat/circle/yoda/src/spell_parser.c 2004-01-18 17:40:29.000000000 -0600 @@ -1109,5 +1109,6 @@ void mag_assign_spells(void) skillo(SKILL_WP_FLAIL, "flail"); skillo(SKILL_WP_STAFF, "staff"); skillo(SKILL_WP_HAMMER, "hammer"); + skillo(SKILL_CIRCLE, "circle"); } diff -BbuprN -x '*.o' -x conf.h /home/zizazat/tmp/src/spells.h /home/zizazat/circle/yoda/src/spells.h --- /home/zizazat/tmp/src/spells.h 2003-11-29 09:36:56.000000000 -0600 +++ /home/zizazat/circle/yoda/src/spells.h 2004-01-18 17:40:29.000000000 -0600 @@ -114,6 +114,7 @@ #define SKILL_LANG_DWARVEN 144 #define SKILL_DISARM 160 #define SKILL_TURNING 161 +#define SKILL_CIRCLE 163 #define SKILL_WP_DAGGER 170 /* Weapon prof */ #define SKILL_WP_SWORD_SHORT 171 #define SKILL_WP_SWORD_LONG 172