#if defined(macintosh) #include <types.h> #else #include <sys/types.h> #endif #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include "merc.h" void do_sclaws( CHAR_DATA *ch, char *argument ) { if(IS_NPC(ch)) return; if( !IS_CLASS(ch,CLASS_WOLF) ) { do_huh(ch,""); return; } if( GET_POWERS(ch,DISC_LUNA) < 5) { stc("You need level 5 in Luna to use silver claws.\n\r",ch); return; } if( !IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_SCLAW) ) { stc("Your claws turn into pure silver!\n\r",ch); act("$n's claws turn to pure silver!",ch,NULL,NULL,TO_ROOM); SET_BIT_POWERS(ch,WOLF_BITS,BIT_SCLAW); return; } else if( IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_SCLAW) ) { stc("Your claws return to their normal state.\n\r",ch); act("$n's claws are no longer composed of pure silver.",ch,NULL,NULL,TO_ROOM); REM_BIT_POWERS(ch,WOLF_BITS,BIT_SCLAW); return; } return; } void do_moonbeam( CHAR_DATA *ch, char *argument ) { CHAR_DATA *victim; char arg[MAX_INPUT_LENGTH]; int dam = 0; int cost = 100 * GET_POWERS(ch,DISC_LUNA); argument = one_argument(argument,arg); if( IS_NPC(ch) ) return; if( !IS_CLASS(ch,CLASS_WOLF) ) { do_huh(ch,""); return; } if( GET_POWERS(ch,DISC_LUNA) < 8 ) { stc("You need to obtain level 8 in Luna to use moonbeam.\n\r",ch); return; } if( ch->mana < cost ) { stc("You do not have enough energy to summon a moonbeam.\n\r",ch); return; } if( arg[0] == '\0' ) { stc( "Who's flesh do you wish to sear?\n\r", ch ); return; } if( ( victim = get_char_room(ch,arg) ) == NULL ) { stc( "They aren't here.\n\r", ch ); return; } if( victim == ch ) { stc("Not the brightest are we?\n\r",ch); return; } if( is_safe(ch,victim) ) { stc("Not in safe.\n\r",ch); return; } if( weather_info.sunlight == SUN_DARK || weather_info.sunlight == SUN_SET ) dam = number_range(150,300); else dam = number_range(75,150); dam *= GET_POWERS(ch,DISC_LUNA); dam += number_range(1,GET_POWERS(ch,DISC_LUNA)*100); sprintf(arg,"You sear $N's flesh with a deadly beam of moonlight! [%d]",dam); act(arg,ch,NULL,victim,TO_CHAR); sprintf(arg,"$n sears $N's flesh with a deadly beam of moonlight! [%d]",dam); act(arg,ch,NULL,victim,TO_NOTVICT); sprintf(arg,"$n sears your flesh with a deadly beam of moonlight! [%d]",dam); act(arg,ch,NULL,victim,TO_VICT); hurt_person(ch,victim,dam); set_fighting(ch,victim); update_pos(victim); ch->mana -= cost; WAIT_STATE(ch,GET_POWERS(ch,DISC_LUNA)*2); return; } void do_moongate( CHAR_DATA *ch, char *argument ) { CHAR_DATA *victim; OBJ_DATA *obj; char arg[MAX_INPUT_LENGTH]; int cost = 15000; one_argument( argument, arg ); if( IS_NPC(ch) ) return; if( !IS_CLASS(ch,CLASS_WOLF) ) { do_huh(ch,""); return; } if( GET_POWERS(ch,DISC_LUNA) < 6 ) { stc("You need to obtain level 6 Luna to use moongate.\n\r",ch); return; } if( ch->move < cost ) { stc("You don't have enough stamina to summon a moongate.\n\r",ch); return; } if( arg[0] == '\0' ) { stc( "Who do you wish to gate to?\n\r", ch ); return; } if( (victim = get_char_world( ch, arg ) ) == NULL ) { stc("They arent here.\n\r",ch); return; } if( (ch->in_room->vnum >= 50) && (ch->in_room->vnum <= 68) ) { stc("You cannot do this whilst you are in the arena.\n\r", ch); return; } if ((victim->in_room->vnum >= 50) && (victim->in_room->vnum <= 68)) { stc("You cannot do this whilst they are in the arena.\n\r", ch); return; } if( victim == ch ) { stc("Not the brightest are we?\n\r",ch); return; } if( IS_IMMORTAL(victim) ) { stc("Not on immortals.\n\r",ch); return; } if( is_ds_range(ch) || is_ds_range(victim) ) return; if( victim->in_room == NULL || IS_NPC(victim) || IS_SET(ch->in_room->room_flags, ROOM_PRIVATE) || IS_SET(ch->in_room->room_flags, ROOM_SOLITARY) || IS_SET(ch->in_room->room_flags, ROOM_NO_RECALL) || 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->in_room->vnum == ch->in_room->vnum) { stc( "You failed.\n\r", ch ); return; } obj = create_object( get_obj_index( OBJ_VNUM_GATE2 ), 0 ); obj->value[0] = victim->in_room->vnum; obj->value[3] = ch->in_room->vnum; obj->timer = 5; if( IS_AFFECTED(ch,AFF_SHADOWPLANE) ) obj->extra_flags = ITEM_SHADOWPLANE; obj_to_room( obj, ch->in_room ); obj = create_object( get_obj_index( OBJ_VNUM_GATE2 ), 0 ); obj->value[0] = ch->in_room->vnum; obj->value[3] = victim->in_room->vnum; obj->timer = 5; if( IS_AFFECTED(victim,AFF_SHADOWPLANE) ) obj->extra_flags = ITEM_SHADOWPLANE; obj_to_room( obj, victim->in_room ); act("A look of concentration passes over $n's face.",ch,NULL,NULL,TO_ROOM); stc("A look of concentration passes over your face.\n\r",ch); act("$p appears in front of $n in a beam of moonlight.",ch,obj,NULL,TO_ROOM); act("$p appears in front of you in a beam of moonlight.",ch,obj,NULL,TO_CHAR); act("$p appears in front of $n in a beam of moonlight.",victim,obj,NULL,TO_ROOM); act("$p appears in front of you in a beam of moonlight.",ch,obj,victim,TO_VICT); ch->move -= cost; WAIT_STATE(ch,12); return; } void do_gmotherstouch( CHAR_DATA *ch, char *argument ) { CHAR_DATA *victim; char arg[MAX_INPUT_LENGTH]; int cost = GET_POWERS(ch,DISC_LUNA) * 200; int dam = GET_POWERS(ch,DISC_LUNA) * 75; dam += number_range(200,450); argument = one_argument(argument,arg); if( IS_NPC(ch) ) return; if( !IS_CLASS(ch, CLASS_WOLF) ) { do_huh(ch,""); return; } if( GET_POWERS(ch,DISC_LUNA) < 4 ) { stc("You need to obtain level 4 in Luna to use grandmother's touch.\n\r",ch); return; } if( ch->mana < cost ) { stc("You do not have enough energy to summon the grandmother's touch.\n\r",ch); return; } if( ( victim = get_char_room(ch, arg) ) == NULL ) { stc( "They aren't here.\n\r", ch ); return; } if( arg[0] == '\0' ) victim = ch; if( !can_heal(ch, victim) ) return; act2("You surround $N in a healing beam of moonlight. [$D]",ch, NULL, victim, TO_CHAR,dam); act2("$n surrounds $N in a healing beam of moonlight. [$D]",ch, NULL, victim, TO_NOTVICT,dam); act2("$n surrounds you in a healing beam of moonlight. [$D]",ch, NULL, victim, TO_VICT,dam); victim->hit += dam; ch->mana -= cost; WAIT_STATE(ch,15); return; } void do_motherstouch( CHAR_DATA *ch, char *argument ) { int cost = GET_POWERS(ch,DISC_LUNA) * 100; int dam = GET_POWERS(ch,DISC_LUNA) * 40; dam += number_range(100,200); if( IS_NPC(ch) ) return; if( GET_POWERS(ch,DISC_LUNA) < 3 ) { stc("You need to obtain level 3 in Luna to use mother's touch.\n\r",ch); return; } if( ch->mana < cost ) { stc("You don't have enough energy to use mother's touch.\n\r",ch); return; } act2("You are surrounded by a beam of moonlight, and feel healed. [$D]", ch, NULL, NULL, TO_CHAR,dam); act2("$n is surrounded by a beam of moonlight, and looks healed. [$D]",ch, NULL, NULL, TO_ROOM,dam); ch->hit += dam; ch->mana -= cost; WAIT_STATE(ch,12); return; } void do_flameclaws( CHAR_DATA *ch, char *argument ) { if( IS_NPC(ch) ) return; if( !IS_CLASS(ch,CLASS_WOLF) ) { do_huh(ch,""); return; } if( GET_POWERS(ch,DISC_LUNA) < 1 ) { stc("You need to obtain level 1 in the Luna totem to use flame claws.\n\r",ch); return; } if( IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_FCLAW) ) { stc("The flames surrounding your claws fade.\n\r",ch); act("The flames surrounding $n's claws fade.",ch,NULL,NULL,TO_ROOM); REM_BIT_POWERS(ch,WOLF_BITS,BIT_FCLAW); return; } else if( !IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_FCLAW) ) { stc("Your claws are surrounded by blazing flames.\n\r",ch); act("$n's claws are surrounded by blazing flames.",ch,NULL,NULL,TO_ROOM); SET_BIT_POWERS(ch,WOLF_BITS,BIT_FCLAW); return; } return; } void do_rend( CHAR_DATA *ch,char *argument ) { if( IS_NPC(ch) ) return; if( !IS_CLASS(ch,CLASS_WOLF) ) { do_huh(ch,""); return; } if( GET_POWERS(ch,DISC_BOAR) < 7 ) { stc("You need to obtain level 7 in Boar to rend equipment.\n\r",ch); return; } if( !IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_REND) ) { stc("You will now ruthlessly rend your opponents eq.\n\r",ch); SET_BIT_POWERS(ch,WOLF_BITS,BIT_REND); return; } else if( IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_REND) ) { stc("You no longer ruthlessly rend your opponents eq.\n\r",ch); REM_BIT_POWERS(ch,WOLF_BITS,BIT_REND); return; } return; } void do_skin( CHAR_DATA *ch,char *argument ) { if( IS_NPC(ch) ) return; if( !IS_CLASS(ch,CLASS_WOLF) ) { do_huh(ch,""); return; } if( GET_POWERS(ch,DISC_BEAR) < 7 ) { stc("You need to obtain level 7 in Bear to toughen your skin.\n\r",ch); return; } if( !IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_TOUGH) ) { stc("Your skin hardens.\n\r",ch); SET_BIT_POWERS(ch,WOLF_BITS,BIT_TOUGH); return; } else if( IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_TOUGH) ) { stc("Your skin softens.\n\r",ch); REM_BIT_POWERS(ch,WOLF_BITS,BIT_TOUGH); return; } return; } void do_jawlock( CHAR_DATA *ch,char *argument ) { if( IS_NPC(ch) ) return; if( !IS_CLASS(ch,CLASS_WOLF) ) { do_huh(ch,""); return; } if( GET_POWERS(ch,DISC_RAPTOR) < 8 ) { stc("You need to obtain level 8 in Raptor to use jawlock.\n\r",ch); return; } if( !IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_JAW) ) { stc("Your jaw grows stronger and more ready to clamp on your enemy.\n\r",ch); SET_BIT_POWERS(ch,WOLF_BITS,BIT_JAW); return; } else if( IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_JAW) ) { stc("Your jaw weakens.\n\r",ch); REM_BIT_POWERS(ch,WOLF_BITS,BIT_JAW); return; } return; } void do_perception( CHAR_DATA *ch,char *argument ) { if( IS_NPC(ch) ) return; if( !IS_CLASS(ch,CLASS_WOLF) ) { do_huh(ch,""); return; } if( GET_POWERS(ch,DISC_RAPTOR) < 3 ) { stc("You need to obtain level 3 in Raptor to heighten your perception.\n\r",ch); return; } if( !IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_SENSES) ) { stc("Your senses expand to incredible proportions.\n\r",ch); SET_BIT_POWERS(ch,WOLF_BITS,BIT_SENSES); return; } else if( IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_SENSES) ) { stc("Your senses return to their normal state.\n\r",ch); REM_BIT_POWERS(ch,WOLF_BITS,BIT_SENSES); return; } return; } void do_roar( CHAR_DATA *ch,char *argument ) { CHAR_DATA *victim; if( IS_NPC(ch) ) return; if( !IS_CLASS(ch,CLASS_WOLF) ) { do_huh(ch,""); return; } if( GET_POWERS(ch,DISC_BEAR) < 6 ) { stc("You need to obtain level 6 in Bear to roar.\n\r",ch); return; } if( (victim = ch->fighting) == NULL) { stc("You arent fighting anyone.\n\r",ch); return; } if( IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_JAW) ) { stc("That would be pointless with your jaws still clamped!\n\r",ch); return; } act("$n roars and screams, intimidating the hell out of $N!",ch,NULL,victim,TO_NOTVICT); act("You roar and scream, intimidating the hell out of $N!",ch,NULL,victim,TO_CHAR); act("$n roars and screams, intimidating the hell out of you!",ch,NULL,victim,TO_VICT); if( number_range(1,100) > 30 ) { do_flee(victim,""); WAIT_STATE(victim,24); } WAIT_STATE(ch,12); return; } void do_quills( CHAR_DATA *ch,char *argument ) { if( IS_NPC(ch) ) return; if( !IS_CLASS(ch,CLASS_WOLF) ) { do_huh(ch,""); return; } if( GET_POWERS(ch,DISC_BEAR) < 5 ) { stc("You need to obtain level 5 in Bear to extend your quills.\n\r",ch); return; } if( !IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_QUILLS) ) { stc("Sharp quills extend from your back.\n\r",ch); SET_BIT_POWERS(ch,WOLF_BITS,BIT_QUILLS); return; } else if( IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_QUILLS) ) { stc("Your quills sink into your back.\n\r",ch); REM_BIT_POWERS(ch,WOLF_BITS,BIT_QUILLS); return; } return; } void do_slam(CHAR_DATA *ch,char *argument) { if( IS_NPC(ch) ) return; if( !IS_CLASS(ch,CLASS_WOLF) ) { do_huh(ch,""); return; } if( GET_POWERS(ch,DISC_BEAR) < 8 ) { stc("You need to obtain level 8 in Bear 8 to shoulder slam.\n\r",ch); return; } if( !IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_SLAM) ) { stc("You will now shoulder slam when you get a chance.\n\r",ch); SET_BIT_POWERS(ch,WOLF_BITS,BIT_SLAM); return; } else if( IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_SLAM) ) { stc("You now dont shoulderslam when given a chance.\n\r",ch); REM_BIT_POWERS(ch,WOLF_BITS,BIT_SLAM); return; } return; } void do_shred( CHAR_DATA *ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; CHAR_DATA *victim; int dam, cost = 0; argument = one_argument( argument, arg ); if( weather_info.sunlight == SUN_DARK || weather_info.sunlight == SUN_SET ) dam = number_range(250,500); else dam = number_range(125,250); dam *= GET_POWERS(ch,DISC_RAPTOR); dam += number_range(1,GET_POWERS(ch,DISC_RAPTOR)*100); cost = dam/2; if( !IS_CLASS(ch,CLASS_WOLF) ) { do_huh(ch,""); return; } if( GET_POWERS(ch,DISC_RAPTOR) < 6 ) { stc("You need to obtain level 6 in Raptor to shred.\n\r",ch); return; } if( arg[0] == '\0' ) { stc("Shred whom?\n\r",ch); return; } if( ( victim = get_char_room(ch, arg) ) == NULL ) { stc("They aren't here.\n\r",ch); return; } if( victim == ch ) { stc("Not the brightest are you?\n\r",ch); return; } if( victim->fighting != NULL ) { stc("You can't shred a fighting person.\n\r",ch); return; } if( !IS_AFFECTED(ch,AFF_SHADOWPLANE) ) { stc("You can only shred from the shadowplane!\n\r",ch); return; } do_shadowplane(ch,""); if( is_safe(ch,victim) ) { stc("Not while safe.\n\r",ch); return; } damage(ch,victim,dam,gsn_shred); if( GET_POWERS(ch,DISC_RAPTOR) > 6) damage(ch,victim,dam,gsn_shred); if( GET_POWERS(ch,DISC_RAPTOR) > 7) damage(ch,victim,dam,gsn_shred); if( GET_POWERS(ch,DISC_RAPTOR) > 9) damage(ch,victim,dam,gsn_shred); WAIT_STATE(ch,24); return; } void do_run(CHAR_DATA *ch, char *argument) { EXIT_DATA *pexit; char direct[MAX_STRING_LENGTH]; char arg[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; ROOM_INDEX_DATA *in_room, *to_room; int dir, count = 0; argument = one_argument(argument,arg); in_room=ch->in_room; if( IS_NPC(ch) ) return; if( !IS_CLASS(ch,CLASS_WOLF) ) { do_huh(ch,""); return; } if( GET_POWERS(ch,DISC_RAPTOR) < 2 ) { stc("You need to obtain level 2 in Raptor to run.\n\r",ch); return; } if( IS_AFFECTED(ch,AFF_WEBBED) ) { stc( "Not with all this sticky webbing on.\n\r", ch); return; } if( IS_AFFECTED(ch, AFF_TENDRILS) ) { stc("You are unable to move tangled in these tendrils.\n\r",ch); return; } if( ch->move < 1000 ) { stc("You are too exhausted.\n\r",ch); return; } if( arg[0] == '\0' ) { stc("Run which direction?\n\r",ch); return; } if( str_cmp(arg,"w") && str_cmp(arg,"e") && str_cmp(arg,"n") && str_cmp(arg, "s") ) { stc("You can only run n, s, e or w.\n\r",ch); return; } if( !str_cmp(arg,"w") ) sprintf(direct,"west"); if( !str_cmp(arg,"e") ) sprintf(direct,"east"); if( !str_cmp(arg,"s") ) sprintf(direct,"south"); if( !str_cmp(arg,"n") ) sprintf(direct,"north"); if( !str_cmp(arg,"w") ) dir = 3; if( !str_cmp(arg,"e") ) dir = 1; if( !str_cmp(arg,"n") ) dir = 0; if( !str_cmp(arg,"s") ) dir = 2; while( count < 10 ) { if( (pexit = in_room->exit[dir]) == NULL || (to_room= pexit->to_room) == NULL) { stc("You stop running.\n\r",ch); act("$n comes to a screeching halt!",ch,NULL,NULL,TO_ROOM); WAIT_STATE(ch,10); } count++; sprintf(buf,"You run %s.\n\r",direct); stc(buf,ch); sprintf(buf,"%s runs %s.\n\r",ch->name,direct); act(buf,ch,NULL,NULL,TO_ROOM); move_char(ch,dir); } stc("You stop running.\n\r",ch); act("$n comes to a screeching halt!",ch,NULL,NULL,TO_ROOM); return; } void do_talons( CHAR_DATA *ch, char *argument ) { char arg[MAX_STRING_LENGTH]; CHAR_DATA *victim; int dam, cost = 0; if( weather_info.sunlight == SUN_DARK || weather_info.sunlight == SUN_SET ) dam = number_range(125,250); else dam = number_range(75,125); dam *= GET_POWERS(ch,DISC_RAPTOR)/2; dam += number_range(1,GET_POWERS(ch,DISC_RAPTOR)*100); cost = dam/2; if( IS_NPC(ch) ) return; if( !IS_CLASS(ch,CLASS_WOLF) ) { do_huh(ch,""); return; } if( GET_POWERS(ch,DISC_RAPTOR) < 10 ) { stc("You need to obtain level 10 in Raptor to use talons.\n\r",ch); return; } if( (victim = ch->fighting) == NULL ) { stc( "You aren't fighting anyone.\n\r", ch ); return; } if( ch->move < cost ) { stc("You are too exhausted.\n\r",ch); return; } sprintf(arg,"Your talons strike $N incredibly hard! [%d]",dam); act(arg,ch,NULL,victim,TO_CHAR); sprintf(arg,"$n's talons strike you incredibly hard! [%d]",dam); act(arg,ch,NULL,victim,TO_VICT); sprintf(arg,"$n's talons strike $N incredibly hard! [%d]",dam); act(arg,ch,NULL,victim,TO_NOTVICT); WAIT_STATE(ch,16); ch->move -= cost; hurt_person(ch,victim,dam); return; } void do_devour( CHAR_DATA *ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; OBJ_DATA *obj; int heal; argument = one_argument(argument, arg); if( IS_NPC(ch) ) return; if( !IS_CLASS(ch,CLASS_WOLF) ) { do_huh(ch,""); return; } if( GET_POWERS(ch,DISC_RAPTOR) < 5 ) { stc("You need to obtain level 5 in Raptor to devour.\n\r",ch); return; } if( arg[0] == '\0' ) { stc("Devour what?\n\r",ch); return; } if( (obj = get_obj_list(ch,arg,ch->in_room->contents)) == NULL ) { stc( "You can't find it.\n\r", ch ); return; } if( obj->item_type != ITEM_CORPSE_NPC ) { act("You are unable to devour $p.",ch,obj,0,TO_CHAR); return; } else if( obj->chobj != NULL && !IS_NPC(obj->chobj) && obj->chobj->pcdata->obj_vnum != 0 ) { act("You are unable to devour $p.",ch,obj,0,TO_CHAR); return; } heal = number_range(1,100); ch->hit += heal; ch->mana += heal/4; ch->move += heal/4; if( ch->hit > ch->max_hit ) ch->hit = ch->max_hit; if( ch->mana > ch->max_mana ) ch->mana = ch->max_mana; if( ch->move > ch->max_move ) ch->move = ch->max_move; sprintf(arg,"You devour %d life from $p.",heal); act(arg,ch,obj,NULL,TO_CHAR); act("$p is devoured by $n.", ch,obj,NULL,TO_ROOM); extract_obj(obj); return; } void do_call_wild ( CHAR_DATA *ch, char *argument) { char arg[MAX_INPUT_LENGTH]; CHAR_DATA *victim; argument = one_argument(argument, arg); if( IS_NPC(ch) ) return; if( !IS_CLASS(ch, CLASS_WOLF) ) { do_huh(ch,""); return; } if( GET_POWERS(ch,DISC_CONG) < 7 ) { stc("You need to obtain level 7 in Congregation to call the wild.\n\r", ch); return; } if( ch->mana < 3000 ) { stc("You do not have the required 3000 mana to use this power.\n\r", ch); return; } if( ch->practice < 30 ) { stc("You do not have the required 30 primal to use this power.\n\r", ch); return; } if( arg[0] == '\0' ) { stc("Summon whom?\n\r",ch); return; } if( (victim = get_char_world(ch,arg) ) == NULL) { stc("They aren't here.\n\r",ch); return; } if( victim->in_room == NULL || victim->in_room->area != ch->in_room->area ) { stc("They aren't here.\n\r",ch); return; } if( IS_NPC(victim) ) { stc("Not on NPC's.\n\r",ch); return; } if( is_safe(ch,victim) ) { stc("Not while safe.\n\r",ch); return; } if( ch == victim ) { stc("Not the brightest are we?\n\r",ch); return; } if( is_ds_range(ch) ) return; if( victim->fighting != NULL ) stop_fighting(victim,TRUE ); act("A pack of savage dire wolves enter and drag $n away.",victim,NULL,NULL,TO_ROOM); char_from_room(victim); char_to_room(victim,ch->in_room); ch->mana -= 3000; ch->practice -= 30; act("Your animal friends have retrieved $N.",ch,NULL,victim,TO_CHAR); act("$n's wolf companions drag $N into the room.",ch,NULL,victim,TO_NOTVICT); act( "A pack of savage dire wolves enter the room and drag you away.", ch, NULL, victim, TO_VICT ); do_look(victim,"auto"); WAIT_STATE(ch, 12); return; } void do_wither (CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; OBJ_DATA *obj; char arg[MAX_INPUT_LENGTH]; bool blah = FALSE; int cost = 1000; argument = one_argument (argument, arg); if( IS_NPC (ch) ) return; if( !IS_CLASS(ch,CLASS_WOLF) ) { do_huh(ch,""); return; } if( GET_POWERS(ch,DISC_CONG) < 10 ) { stc("You require congregation level 10 to use wither.\n\r", ch); return; } if( ch->mana < cost ) { stc("You lack the magical stamina.\n\r", ch); return; } if( arg[0] == '\0' ) { stc("Whom do you wish to wither?\n\r", ch); return; } if( (victim = get_char_room(ch,arg) ) == NULL ) { stc("They aren't here.\n\r",ch); return; } if( IS_NPC(victim) ) { stc("Not on mobs.\n\r",ch); return; } if( is_safe(ch,victim) ) { stc("Not while safe.\n\r",ch); return; } if( IS_ARM_R (victim, LOST_ARM) && IS_ARM_L (victim, LOST_ARM) ) { stc("They have already lost both their arms!\n\r",ch); return; } WAIT_STATE(ch,36); ch->mana -= cost; if( !IS_ARM_R(victim,LOST_ARM) ) blah = FALSE; else blah = TRUE; if( !blah ) { if( !IS_ARM_R (victim,LOST_ARM) ) SET_BIT(victim->loc_hp[3],LOST_ARM); if( !IS_BLEEDING (victim,BLEEDING_ARM_R) ) SET_BIT(victim->loc_hp[6],BLEEDING_ARM_R); if( IS_BLEEDING (victim,BLEEDING_HAND_R) ) REMOVE_BIT(victim->loc_hp[6],BLEEDING_HAND_R); act("You concentrate deeply and $N's arm starts to wither!",ch,NULL,victim,TO_CHAR); act("$n's eyes glow dark red as $e gazes at you, and your arm begins withering!",ch,NULL,victim,TO_NOTVICT); act("$n gazes evilly at $N, and $S arm begins withering!",ch,NULL,victim,TO_VICT); make_part(victim,"arm"); if( IS_ARM_L(victim,LOST_ARM) && IS_ARM_R(victim,LOST_ARM) ) { if( (obj = get_eq_char(victim,WEAR_ARMS)) != NULL ) take_item (victim, obj); if( (obj = get_eq_char (victim,WEAR_WIELD)) != NULL) take_item (victim, obj); if( (obj = get_eq_char (victim,WEAR_HANDS)) != NULL) take_item (victim, obj); if( (obj = get_eq_char (victim, WEAR_WRIST_R)) != NULL) take_item (victim, obj); if( (obj = get_eq_char (victim, WEAR_FINGER_R)) != NULL) take_item (victim, obj); return; } } else if( blah ) { if( !IS_ARM_L (victim,LOST_ARM) ) SET_BIT(victim->loc_hp[2],LOST_ARM); if( !IS_BLEEDING (victim,BLEEDING_ARM_L) ) SET_BIT(victim->loc_hp[6],BLEEDING_ARM_L); if( IS_BLEEDING(victim,BLEEDING_HAND_L) ) REMOVE_BIT(victim->loc_hp[6],BLEEDING_HAND_L); act("You concentrate deeply and $N's arm starts to wither!",ch,NULL,victim,TO_CHAR); act("$n's eyes glow dark red as $e gazes at you, and your arm begins withering!",ch,NULL,victim,TO_NOTVICT); act("$n gazes evilly at $N, and $S arm begins withering!",ch,NULL,victim,TO_VICT); make_part (victim, "arm"); if( IS_ARM_L(victim,LOST_ARM) && IS_ARM_R(victim,LOST_ARM) ) { if( (obj = get_eq_char(victim,WEAR_ARMS) ) != NULL ) take_item (victim, obj); if( (obj = get_eq_char(victim,WEAR_WIELD) ) != NULL) take_item (victim, obj); if( (obj = get_eq_char(victim,WEAR_HANDS) ) != NULL) take_item (victim, obj); if( (obj = get_eq_char(victim,WEAR_WRIST_L) ) != NULL) take_item (victim, obj); if( (obj = get_eq_char(victim,WEAR_FINGER_L) ) != NULL) take_item (victim, obj); return; } } return; } void do_wburrow( CHAR_DATA *ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; CHAR_DATA *victim; argument = one_argument(argument,arg); if( IS_NPC(ch) ) return; if( !IS_CLASS(ch,CLASS_WOLF) ) { do_huh(ch,""); return; } if( GET_POWERS(ch,DISC_BOAR) < 5 ) { stc("You need to obtain level 5 in Boar to burrow\n\r",ch); return; } if( arg[0] == '\0' ) { stc("Burrow to who?\n\r", ch); return; } if( (victim = get_char_world(ch,arg) ) == NULL ) { stc("They're not here.\n\r",ch); return; } if( IS_NPC(victim) ) { stc("Not on NPC's.\n\r",ch); return; } if( !str_cmp(ch->clan,"None") || strlen(ch->clan) < 5 ) { stc("You're not even clanned!\n\r",ch); return; } if( str_cmp(victim->clan,ch->clan) ) { stc("You can only burrow to members of your own clan.\n\r", ch); return; } if( victim == ch ) { stc( "Not the brightest are you?\n\r", ch); return; } if( (ch->in_room->vnum >= 50) && (ch->in_room->vnum <= 68) ) { stc("You cannot do this whilst you are in the arena.\n\r", ch); return; } if( (victim->in_room->vnum >= 50) && (victim->in_room->vnum <= 68) ) { stc("You cannot do this whilst they are in the arena.\n\r", ch); return; } if( is_ds_range(victim) ) return; if( victim->in_room == NULL ) { stc( "Nothing happens.\n\r", ch ); return; } stc("You burrow into the ground.\n\r",ch); act("$n burrows into the ground.",ch,NULL,NULL,TO_ROOM); char_from_room(ch); char_to_room(ch,victim->in_room); do_look(ch,"auto"); stc("You burrow out of the ground.\n\r",ch); act("$n burrows out of the ground.",ch,NULL,NULL,TO_ROOM); return; } void do_shift( CHAR_DATA *ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; int toform = 0; int cost = 10000; argument = one_argument(argument,arg); if( IS_NPC(ch) ) return; if( !IS_CLASS(ch, CLASS_WOLF) ) { do_huh(ch,""); return; } if( GET_POWERS(ch,DISC_WOLF) < 10 ) { stc("You need to obtain level 10 in Wolf to use shift.\n\r",ch); return; } if( arg[0] == '\0' ) { stc( "You can shift between the following forms: Homid, Glabro, Crinos, Hispo, Lupus.\n\r", ch ); return; } if( !str_cmp(arg,"homid") ) toform = 1; else if( !str_cmp(arg,"glabro") ) toform = 2; else if( !str_cmp(arg,"crinos") ) toform = 3; else if( !str_cmp(arg,"hispo") ) toform = 4; else if( !str_cmp(arg,"lupus") ) toform = 5; else { stc( "You can shift between the following forms: Homid, Glabro, Crinos, Hispo, Lupus.\n\r", ch ); return; } if( ch->mana < cost ) { stc("You lack the energy to shift forms.\n\r",ch); return; } if( GET_POWERS(ch,WOLF_FORM) == toform ) { stc( "You are already in that form.\n\r", ch ); return; } switch(toform) { default: log_string("*** do_shift returned NULL ***"); break; case 1: stc("Your body shifts and distorts into Homid form!\n\r",ch); break; case 2: stc("Your body shifts and distorts into Glabro form!\n\r",ch); break; case 3: stc("Your body shifts and distorts into Crinos form!\n\r",ch); break; case 4: stc("Your body shifts and distorts into Hispo form!\n\r",ch); break; case 5: stc("Your body shifts and distorts into Lupus form!\n\r",ch); break; } ch->mana -= cost; GET_POWERS(ch,WOLF_FORM) = toform; return; } void do_claws( CHAR_DATA *ch, char *argument) { if( IS_NPC(ch) ) return; if( !IS_CLASS(ch,CLASS_WOLF) ) { do_huh(ch,""); return; } if( GET_POWERS(ch,DISC_WOLF) < 1 ) { stc("You need to obtain level 1 in Wolf to extend your claws.\n\r",ch); return; } if( !IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_CLAWS) ) { stc("Razor sharp talons extend from your fingers!\n\r",ch); act("Razor sharp talons extend from $n's fingers!",ch,NULL,NULL,TO_ROOM); SET_BIT_POWERS(ch,WOLF_BITS,BIT_CLAWS); return; } else if( IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_CLAWS) ) { stc("Your talons shrink back into your fingers.\n\r",ch); act("$n's talons shrink back into $s fingers.",ch,NULL,NULL,TO_ROOM); REM_BIT_POWERS(ch,WOLF_BITS,BIT_CLAWS); return; } return; } void do_fangs( CHAR_DATA *ch, char *argument) { if( IS_NPC(ch) ) return; if( !IS_CLASS(ch,CLASS_WOLF) ) { do_huh(ch,""); return; } if( GET_POWERS(ch,DISC_WOLF) < 2 ) { stc("You need to obtain level 2 in Wolf to extend your fangs.\n\r",ch); return; } if( !IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_FANGS) ) { stc("Razor sharp fangs extend from your gums!\n\r",ch); act("Razor sharp fangs extend from $n's gums!",ch,NULL,NULL,TO_ROOM); SET_BIT_POWERS(ch,WOLF_BITS,BIT_FANGS); return; } else if( IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_FANGS) ) { stc("Your fangs shrink back into your gums.\n\r",ch); act("$n's fangs shrink back into $s gums.",ch,NULL,NULL,TO_ROOM); REM_BIT_POWERS(ch,WOLF_BITS,BIT_FANGS); return; } return; } void do_shield( CHAR_DATA *ch, char *argument) { if( IS_NPC(ch) ) return; if( !IS_CLASS(ch,CLASS_WOLF) ) { do_huh(ch,""); return; } if( GET_POWERS(ch,DISC_OWL) < 3 ) { stc("You need to obtain level 3 in Owl to form a shield.\n\r",ch); return; } if( !IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_SHIELD) ) { stc("A barely visible shield of nature forms around you!\n\r",ch); SET_BIT_POWERS(ch,WOLF_BITS,BIT_SHIELD); return; } else if( IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_SHIELD) ) { stc("Your shield of nature flickers, then fades away.\n\r",ch); REM_BIT_POWERS(ch,WOLF_BITS,BIT_SHIELD); return; } return; } void do_rage_up( CHAR_DATA *ch, char *argument ) { CHAR_DATA *vch; CHAR_DATA *vch_next; if( IS_NPC(ch) ) return; if( !IS_CLASS(ch,CLASS_WOLF)) return; if( IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_RAGED) ) return; else if( !IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_RAGED) ) SET_BIT_POWERS(ch,WOLF_BITS,BIT_RAGED); stc("You throw back your head and howl with rage!\n\r",ch); act("$n throws back $s head and howls with rage!.",ch,NULL,NULL,TO_ROOM); stc("Coarse dark hair sprouts from your body!\n\r",ch); act("Coarse dark hair sprouts from $n's body!",ch,NULL,NULL,TO_ROOM); stc("Your eyes start glowing red!\n\r",ch); act("$n's eyes start glowing red!",ch,NULL,NULL,TO_ROOM); if( !IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_FANGS) ) do_fangs(ch,""); if( !IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_CLAWS) ) do_claws(ch,""); ch->rage += 50; if( GET_POWERS(ch,DISC_WOLF) > 3) ch->rage += number_range(100,200); if( ch->rage > 300 ) ch->rage = 300; for( vch = char_list; vch != NULL; vch = vch_next ) { vch_next = vch->next; if( vch->in_room == NULL ) continue; if( ch == vch ) continue; if( vch->trust > 6 ) continue; if( !IS_NPC(vch) && vch->pcdata->chobj != NULL ) continue; if( !IS_NPC(vch) ) { if (vch->in_room == ch->in_room) act("$n throws back $s head and howls with rage!", ch, NULL, vch, TO_VICT); else if( vch->in_room->area == ch->in_room->area ) stc("You hear a fearsome howl close by!\n\r", vch); } if( vch->in_room == ch->in_room ) { if( is_safe(ch,vch) ) continue; if( vch == NULL ) continue; multi_hit(ch,vch,TYPE_UNDEFINED); multi_hit(ch,vch,TYPE_UNDEFINED); if( GET_POWERS(ch,DISC_WOLF) > 4 ) { one_hit(ch,vch,TYPE_UNDEFINED,1); if( number_range(1,2) == 1 ) one_hit(ch,vch,TYPE_UNDEFINED,2); } if( GET_POWERS(ch,DISC_BEAR) > 4 ) { one_hit(ch,vch,TYPE_UNDEFINED,1); if( number_range(1,2) == 1 ) one_hit(ch,vch,TYPE_UNDEFINED,2); } } } return; } void do_rage_down( CHAR_DATA *ch, char *argument ) { if( IS_NPC(ch) ) return; if( !IS_CLASS(ch,CLASS_WOLF)) return; if( !IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_RAGED) ) return; REM_BIT_POWERS(ch,WOLF_BITS,BIT_RAGED); stc("The red glow in your eyes fades.\n\r",ch); act("The red glow in $n's eyes fades.",ch,NULL,NULL,TO_ROOM); stc("Your coarse hair shrinks back into your body.\n\r",ch); act("$n's coarse hair shrinks back into $s body.",ch,NULL,NULL,TO_ROOM); ch->rage -= 50; if( ch->rage < 0 ) ch->rage = 0; return; } void do_vanish( CHAR_DATA *ch, char *argument ) { if( IS_NPC(ch) ) return; if( !IS_CLASS(ch, CLASS_WOLF) ) { do_huh(ch,""); return; } if( GET_POWERS(ch,DISC_HAWK) < 5 ) { stc("You need to obtain level 5 in Hawk to vanish from sight.\n\r",ch); return; } if( IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_VANISH) ) { stc("You slowly fade into existance.\n\r",ch); act("$n slowly fades into existance.",ch,NULL,NULL,TO_ROOM); REM_BIT_POWERS(ch,WOLF_BITS,BIT_VANISH); return; } else if( !IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_VANISH) ) { stc( "You slowly fade out of existance.\n\r", ch ); act("$n slowly fades out of existance.",ch,NULL,NULL,TO_ROOM); SET_BIT_POWERS(ch,WOLF_BITS,BIT_VANISH); } return; } void do_web( CHAR_DATA *ch, char *argument ) { AFFECT_DATA af; CHAR_DATA *victim; char arg[MAX_INPUT_LENGTH]; int sn; int cost = 0; bool fail = FALSE; argument = one_argument(argument,arg); if( !IS_CLASS(ch,CLASS_WOLF) && !IS_CLASS(ch,CLASS_DROW) ) { do_huh(ch,""); return; } if( IS_CLASS(ch,CLASS_DROW) && !IS_SET(GET_POWERS(ch,DROW_BITS),DPOWER_WEB) ) { do_huh(ch,""); return; } if( IS_CLASS(ch,CLASS_WOLF) && GET_POWERS(ch,DISC_SPIDER) < 2 ) { stc("You need to obtain level 2 in Spider to web your enemies.\n\r",ch); return; } if( IS_CLASS(ch,CLASS_DROW) ) cost = 100; else cost = 1500; if( ch->mana < cost ) { act2("You lack the $D mana to create a magical webbing!",ch,NULL,NULL,TO_CHAR,cost); return; } if( arg[0] == '\0' ) { stc("Web who?\n\r", ch); return; } if( (victim = get_char_room(ch, arg)) == NULL) { stc("They arent here.\n\r", ch); return; } if( ch == victim ) { stc("Not the brightest are you?\n\r",ch); return; } if( is_safe(ch, victim) ) { stc("Not while safe.\n\r", ch); return; } if( IS_AFFECTED(victim, AFF_WEBBED)) { stc("They are already webbed.\n\r", ch); return; } if( (sn = skill_lookup("web")) < 0) return; if( IS_CLASS(ch,CLASS_DROW) && number_percent() > 80 ) fail = TRUE; else if( IS_CLASS(ch,CLASS_WOLF) && number_percent() > (GET_POWERS(ch,DISC_SPIDER) * 7) ) fail = TRUE; else fail = FALSE; if( fail ) { act("You shoot a web at $N, but it misses!",ch,NULL,victim,TO_CHAR); act("$n shoots a web at you, but it misses!",ch,NULL,victim,TO_VICT); act("$n shoots a web at $N, but it misses!",ch,NULL,victim,TO_NOTVICT); } else { af.type = sn; af.location = APPLY_AC; af.modifier = 400; af.duration = number_range(1,2); af.bitvector = AFF_WEBBED; affect_to_char(victim, &af); act("You shoot a web at $N, covering $M in sticky webbing!",ch,NULL,victim,TO_CHAR); act("$n shoots a web at you, covering you in sticky webbing!.",ch,NULL,victim,TO_VICT); act("$n shoots a web at $N, covering $M in sticky webbing!",ch,NULL,victim,TO_NOTVICT); } ch->mana -= cost; WAIT_STATE(ch, 10); return; } void wolf_disciplines( CHAR_DATA *ch, char *argument, char *argument2 ) { char arg[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; argument = one_argument(argument,arg); argument2 = one_argument(argument2,arg2); if( IS_NPC(ch) ) return; if( !IS_CLASS(ch,CLASS_WOLF) ) { do_huh(ch,""); return; } if( arg[0] == '\0' && arg2[0] == '\0' ) { display_class_stats(ch); return; } else if( !str_cmp(arg,"learn") ) { if( arg2[0] == '\0' ) { stc("Learn which discipline?\n\r",ch); return; } if( !str_cmp(arg2,"bear") ) { improve_class(ch,DISC_BEAR); return; } else if( !str_cmp(arg2,"lynx") ) { improve_class(ch,DISC_LYNX); return; } else if( !str_cmp(arg2,"boar") ) { improve_class(ch,DISC_BOAR); return; } else if( !str_cmp(arg2,"owl") ) { improve_class(ch,DISC_OWL); return; } else if( !str_cmp(arg2,"spider") ) { improve_class(ch,DISC_SPIDER); return; } else if( !str_cmp(arg2,"wolf") ) { improve_class(ch,DISC_WOLF); return; } else if( !str_cmp(arg2,"hawk") ) { improve_class(ch,DISC_HAWK); return; } else if( !str_cmp(arg2,"mantis") ) { improve_class(ch,DISC_MANTIS); return; } else if( !str_cmp(arg2,"raptor") ) { improve_class(ch,DISC_RAPTOR); return; } else if( !str_cmp(arg2,"luna") ) { improve_class(ch,DISC_LUNA); return; } else if( !str_cmp(arg2,"pain") ) { improve_class(ch,DISC_PAIN); return; } else if( !str_cmp(arg2,"congregation") ) { improve_class(ch,DISC_CONG); return; } else { stc("Learn which discipline?\n\r",ch); return; } return; } else if( !str_cmp(arg,"bear") ) { if( GET_POWERS(ch,DISC_BEAR) == 0 ) stc("You have no knowledge of the Bear discipline.\n\r",ch); if( GET_POWERS(ch,DISC_BEAR) > 0 ) stc("[01] [Auto ] You are empowered by the spirit of the Bear, increasing damage.\n\r",ch); if( GET_POWERS(ch,DISC_BEAR) > 2 ) stc("[03] [Rage ] You can force yourself into a wild rage.\n\r",ch); if( GET_POWERS(ch,DISC_BEAR) > 4 ) stc("[05] [Quills ] You can extend sharp quills from your backs, and your rage is improved.\n\r",ch); if( GET_POWERS(ch,DISC_BEAR) > 5 ) stc("[06] [Roar ] You know how to roar, and intimidate your enemies.\n\r",ch); if( GET_POWERS(ch,DISC_BEAR) > 6 ) stc("[07] [Skin ] You can toughen your skin, reducing damage.\n\r",ch); if( GET_POWERS(ch,DISC_BEAR) > 7 ) stc("[08] [Slam ] You can shoulder slam your opponents in combat.\n\r",ch); return; } else if( !str_cmp(arg,"lynx") ) { if( GET_POWERS(ch,DISC_LYNX) == 0 ) stc("You have no knowledge of the Lynx discipline.\n\r",ch); if( GET_POWERS(ch,DISC_LYNX) > 0 ) stc("[**] [Auto ] Mastery of the Lynx discipline grants enhanced parry/dodge.\n\r",ch); return; } else if( !str_cmp(arg,"boar") ) { if( GET_POWERS(ch,DISC_BOAR) == 0 ) stc("You have no knowledge of the Boar discipline.\n\r",ch); if( GET_POWERS(ch,DISC_BOAR) > 0 ) stc("[**] [Auto ] Mastery of the Boar discipline grants enhanced toughness.\n\r",ch); if( GET_POWERS(ch,DISC_BOAR) > 4 ) stc("[05] [Burrow ] You can burrow to your clan members in need.\n\r",ch); if( GET_POWERS(ch,DISC_BOAR) > 6 ) stc("[07] [Rend ] You can ruthlessly rend your opponents in combat, enhancing damage.\n\r",ch); return; } else if( !str_cmp(arg,"owl") ) { if( GET_POWERS(ch,DISC_OWL) == 0 ) stc("You have no knowledge of the Owl discipline.\n\r",ch); if( GET_POWERS(ch,DISC_OWL) > 0 ) stc("[**] [Auto ] Mastery of the Owl discipline grants enhanced dodge.\n\r",ch); if( GET_POWERS(ch,DISC_OWL) > 2 ) stc("[03] [Shield ] You are able to form a protective shield of nature around yourself.\n\r",ch); if( GET_POWERS(ch,DISC_OWL) > 5 ) stc("[06] [Shadowplane ] You can enter the realm of shadows.\n\r",ch); return; } else if( !str_cmp(arg,"spider") ) { if( GET_POWERS(ch,DISC_SPIDER) == 0 ) stc("You have no knowledge of the Spider discipline.\n\r",ch); if( GET_POWERS(ch,DISC_SPIDER) > 0 ) stc("[**] [Auto ] Mastery of the spider discipline grants inceased attack speed.\n\r",ch); if( GET_POWERS(ch,DISC_SPIDER) > 2 ) stc("[03] [Web ] You know how to entrap your enemies in a web.\n\r",ch); return; } else if( !str_cmp(arg,"wolf") ) { if( GET_POWERS(ch,DISC_WOLF) == 0 ) stc("You have no knowledge of the Wolf discipline.\n\r",ch); if( GET_POWERS(ch,DISC_WOLF) > 0 ) stc("[01] [Claws ] You can extend long claws from your fingers.\n\r",ch); if( GET_POWERS(ch,DISC_WOLF) > 1 ) stc("[02] [Fangs ] You can extend long fangs from your gums.\n\r",ch); if( GET_POWERS(ch,DISC_WOLF) > 2 ) stc("[03] [Calm ] You have learned to control your anger, and calm yourself.\n\r",ch); if( GET_POWERS(ch,DISC_WOLF) > 4 ) stc("[05] [Auto ] You are in tune with the Wolf, and your rage has been enhanced.\n\r",ch); if( GET_POWERS(ch,DISC_WOLF) > 9 ) stc("[10] [Shift ] You are able to shift between the various forms of a werewolf.\n\r",ch); return; } else if( !str_cmp(arg,"hawk") ) { if( GET_POWERS(ch,DISC_HAWK) == 0 ) stc("You have no knowledge of the Hawk discipline.\n\r",ch); if( GET_POWERS(ch,DISC_HAWK) > 0 ) stc("[**] [Auto ] Mastery of the Hawk discipline grants increased attack speed.\n\r",ch); if( GET_POWERS(ch,DISC_HAWK) > 4 ) stc("[05] [Vanish ] You have mastered the understanding of sight, enabling you to vanish from your foes.\n\r",ch); return; } else if( !str_cmp(arg,"mantis") ) { if( GET_POWERS(ch,DISC_MANTIS) == 0 ) stc("You have no knowledge of the Mantis discipline.\n\r",ch); if( GET_POWERS(ch,DISC_MANTIS) > 0 ) stc("[**] [Auto ] Mastery of the Mantis discipline grants enhanced parry.\n\r",ch); return; } else if( !str_cmp(arg,"raptor") ) { if( GET_POWERS(ch,DISC_RAPTOR) == 0 ) stc("You have no knowledge of the Raptor discipline.\n\r",ch); if( GET_POWERS(ch,DISC_RAPTOR) > 1 ) stc("[02] [Run ] You can rapidly sprint across land.\n\r",ch); if( GET_POWERS(ch,DISC_RAPTOR) > 2 ) stc("[03] [Perception ] Your perception has been heightened, aiding in critical blows.\n\r",ch); if( GET_POWERS(ch,DISC_RAPTOR) > 4 ) stc("[05] [Devour ] You can devour corpses and drain the life from them.\n\r",ch); if( GET_POWERS(ch,DISC_RAPTOR) > 5 ) stc("[06] [Shred ] You can shred your enemies ruthlessly from the shadows.\n\r",ch); if( GET_POWERS(ch,DISC_RAPTOR) > 7 ) stc("[08] [Jawlock ] You can lock your jaw, to prevent your enemies from fleeing.\n\r",ch); if( GET_POWERS(ch,DISC_RAPTOR) > 9 ) stc("[10] [Talons ] You can claw at your enemies with long, sharp talons.\n\r",ch); return; } else if( !str_cmp(arg,"luna") ) { if( GET_POWERS(ch,DISC_LUNA) == 0 ) stc("You have no knowledge of the Luna discipline.\n\r",ch); if( GET_POWERS(ch,DISC_LUNA) > 0 ) stc("[01] [Flameclaws ] You are able to set your claws on fire.\n\r",ch); if( GET_POWERS(ch,DISC_LUNA) > 2 ) stc("[03] [Motherstouch ] You can heal your wounds with the touch of your mother.\n\r",ch); if( GET_POWERS(ch,DISC_LUNA) > 3 ) stc("[04] [Gmotherstouch] You can heal your wounds with the touch of your grandmother.\n\r",ch); if( GET_POWERS(ch,DISC_LUNA) > 4 ) stc("[05] [Silverclaws ] You can turn your claws to pure silver.\n\r",ch); if( GET_POWERS(ch,DISC_LUNA) > 5 ) stc("[06] [Moongate ] You can create a gate of moonlight to others.\n\r",ch); if( GET_POWERS(ch,DISC_LUNA) > 7 ) stc("[08] [Moonbeam ] You can sear the flesh of your enemies with a beam of moonlight.\n\r",ch); if( GET_POWERS(ch,DISC_LUNA) > 9 ) stc("[10] [Auto ] At night you are protected from harm in the moon's rays.\n\r",ch); return; } else if( !str_cmp(arg,"pain") ) { if( GET_POWERS(ch,DISC_PAIN) == 0 ) stc("You have no knowledge of the Pain discipline.\n\r",ch); if( GET_POWERS(ch,DISC_PAIN) > 0 ) stc("[**] [Auto ] Mastery of the Pain discipline grants enhanced toughness.\n\r",ch); return; } else if( !str_cmp(arg,"congregation") ) { if( GET_POWERS(ch,DISC_CONG) == 0 ) stc("You have no knowledge of the Congregation discipline.\n\r",ch); if( GET_POWERS(ch,DISC_CONG) > 6 ) stc("[07] [Callwild ] You can summon wolves of the wild and draw your enemies to you.\n\r",ch); if( GET_POWERS(ch,DISC_CONG) > 9 ) stc("[10] [Wither ] You can summon the forces of nature to rip off your opponents limbs.\n\r",ch); return; } return; } void do_wolf_rage( CHAR_DATA *ch, char *argument ) { if( IS_NPC(ch) ) return; if( !IS_CLASS(ch,CLASS_WOLF) ) { do_huh(ch,""); return; } if( GET_POWERS(ch,DISC_BEAR) < 3 ) { stc("You need to obtain level 3 in Bear to force your anger.\n\r",ch); return; } if( IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_RAGED) ) { stc("You are already in a frenzied rage!\n\r",ch); return; } if( !IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_RAGED) ) { ch->rage += number_range(8,15); stc("You start snarling angrilly.\n\r",ch); act("$n starts snarling angrilly.",ch,NULL,NULL,TO_ROOM); if( ch->rage >= 100 ) do_rage_up(ch,""); WAIT_STATE(ch,12); return; } return; } void do_wolf_calm( CHAR_DATA *ch, char *argument ) { if( IS_NPC(ch) ) return; if( !IS_CLASS(ch,CLASS_WOLF) ) { do_huh(ch,""); return; } if( GET_POWERS(ch,DISC_WOLF) < 3 ) { stc("You need to obtain level 3 in Wolf to calm your anger.\n\r",ch); return; } if( ch->fighting != NULL ) { stc("You can't control your rage in combat!\n\r",ch); return; } if( ch->rage < 100 ) { stc("You are not in a frenzied rage!\n\r",ch); return; } ch->rage -= number_range(8,15); stc("You take a deep breath and calm yourself.\n\r",ch); act("$n takes a deep breath and tries to calm $mself.",ch,NULL,NULL,TO_ROOM); if( ch->rage < 100 ) do_rage_down(ch,""); WAIT_STATE(ch,12); return; } void do_wolfpowers( CHAR_DATA *ch, char *argument ) { if( IS_NPC(ch) ) return; stc("Bear : rage, quills, roar, skin, slam\n\r",ch); stc("Boar : burrow, rend\n\r",ch); stc("Owl : scry, shield, shadowplane\n\r",ch); stc("Spider : web\n\r",ch); stc("Wolf : claws, fangs, calm, shift\n\r",ch); stc("Hawk : vanish\n\r",ch); stc("Raptor : run, perception, devour, shred, jawlock, talons\n\r",ch); stc("Luna : flameclaws, motherstouch, gmothertouch, silverclaws, moongate, moonbeam\n\r",ch); stc("Congregation: callwild, wither\n\r",ch); return; }