/*************************************************************************** * Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, * * Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe. * * * * Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael * * Chastain, Michael Quan, and Mitchell Tse. * * * * In order to use any part of this Merc Diku Mud, you must comply with * * both the original Diku license in 'license.doc' as well the Merc * * license in 'license.txt'. In particular, you may not remove either of * * these copyright notices. * * * * Much time and thought has gone into this software and you are * * benefitting. We hope that you share your changes too. What goes * * around, comes around. * ***************************************************************************/ /*************************************************************************** * God Wars Mud improvements copyright (C) 1994, 1995, 1996 by Richard * * Woolcock. This mud is NOT to be copied in whole or in part, or to be * * run without the permission of Richard Woolcock. Nobody else has * * permission to authorise the use of this code. * ***************************************************************************/ /************************************************************** * Myth Mud improvements ALL by David Spink aka Morglum. * * This mud is NOT to be copied in whole or in part! No one * * has the permission to authorise the use of this code. * * In order to use this code you MUST comply with the terms * * and conditions in 'license.myth' (as shipped). * **************************************************************/ #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" /* Local functions */ char * gift_breed_name args( ( int gift_no ) ); char * gift_auspice_name args( ( int gift_no ) ); char * gift_tribe_name args( ( int gift_no ) ); void do_persuasion( CHAR_DATA *ch, char *argument ) { if (IS_NPC(ch)) return; if (!IS_WEREWOLF(ch) ) { send_to_char("Huh?\n\r",ch); return; } if (get_breed(ch,BREED_HOMID) < 1) { send_to_char("You require the level 1 Homid power to become persuasive.\n\r",ch); return; } if (IS_EXTRA(ch,EXTRA_AWE) ) { send_to_char("You are no longer so persuasive.\n\r",ch); act("$n no longer appears so persuasive.", ch, NULL, NULL, TO_ROOM); REMOVE_BIT(ch->extra, EXTRA_AWE); return; } send_to_char("Your are now persuasive.\n\r",ch); act("$n suddenly appears very persuasive.", ch, NULL, NULL, TO_ROOM); SET_BIT(ch->extra, EXTRA_AWE); return; } void do_staredown( CHAR_DATA *ch, char *argument ) { CHAR_DATA *victim; char arg [MAX_INPUT_LENGTH]; int sn; int level; int spelltype; argument = one_argument( argument, arg ); if (IS_NPC(ch)) return; if (!IS_WEREWOLF(ch)) { send_to_char( "Huh?\n\r", ch ); return; } if (get_breed(ch,BREED_HOMID) < 2) { send_to_char("You require the level 2 Homid power to staredown someone.\n\r",ch); return; } if (IS_ITEMAFF(ch, ITEMA_PEACE)) do_icy(ch,""); if ( arg[0] == '\0' ) { send_to_char( "Who do you wish to use Staredown on?\n\r", ch ); return; } if ( ( victim = get_char_room( ch, arg ) ) == NULL ) { send_to_char( "They aren't here.\n\r", ch ); return; } if (ch == victim) { send_to_char( "You're pretty scared of yourself!\n\r", ch ); return; } if ( IS_AFFECTED(victim, AFF_FEAR) ) { send_to_char( "They are already pretty scared.\n\r", ch ); return; } act("You lock eyes with $N.",ch,NULL,victim,TO_CHAR); act("$n locks eyes with $N.",ch,NULL,victim,TO_NOTVICT); act("$n locks eyes with you.",ch,NULL,victim,TO_VICT); if ( IS_MORE(victim, MORE_COURAGE) ) { send_to_char( "They are far too brave to be scared so easily.\n\r", ch ); if (!IS_NPC(victim) && ch != victim && IS_MORE(victim, MORE_GUARDIAN)) { guardian_message( victim ); act("$n just failed to use Staredown on you.",ch,NULL,victim,TO_VICT); } return; } if (!IS_NPC(victim) && victim->pcdata->resist[WILL_PRESENCE] > 0) { send_to_char( "Your Staredown has no effect on them.\n\r", ch ); if (!IS_NPC(victim) && ch != victim && IS_MORE(victim, MORE_GUARDIAN)) { guardian_message( victim ); act("$n just failed to use Staredown on you.",ch,NULL,victim,TO_VICT); } return; } if (!IS_NPC(victim) && IS_WILLPOWER(victim, RES_PRESENCE) && victim->pcdata->willpower[0] >= 10) { victim->pcdata->willpower[0] -= 10; victim->pcdata->resist[WILL_PRESENCE] = 60; if (!IS_WILLPOWER(victim, RES_TOGGLE)) REMOVE_BIT(victim->pcdata->resist[0], RES_PRESENCE); send_to_char( "Your Staredown has no effect on them.\n\r", ch ); send_to_char("You burn some willpower to resist Staredown.\n\r",victim); if (!IS_NPC(victim) && ch != victim && IS_MORE(victim, MORE_GUARDIAN)) { guardian_message( victim ); act("$n just failed to use Staredown on you.",ch,NULL,victim,TO_VICT); } return; } if ( ( sn = skill_lookup( "fear" ) ) < 0 ) return; spelltype = skill_table[sn].target; level = get_breed(ch,BREED_HOMID) * 10; (*skill_table[sn].spell_fun) ( sn, level, ch, victim ); WAIT_STATE( ch, 12 ); if (!IS_NPC(victim) && ch != victim && IS_MORE(victim, MORE_GUARDIAN)) { guardian_message( victim ); act("$n just used Staredown on you.",ch,NULL,victim,TO_VICT); } return; } void do_witherlimb( CHAR_DATA *ch, char *argument ) { CHAR_DATA *victim; OBJ_DATA *obj; char arg [MAX_INPUT_LENGTH]; int critical = number_range(1,4); argument = one_argument( argument, arg ); if (IS_NPC(ch)) return; if (!IS_WEREWOLF(ch)) { send_to_char( "Huh?\n\r", ch ); return; } if (get_breed(ch,BREED_METIS) < 4) { send_to_char("You require the level 4 Metis power to Wither Limbs.\n\r",ch); return; } if (IS_ITEMAFF(ch, ITEMA_PEACE)) do_icy(ch,""); if ( arg[0] == '\0' ) { send_to_char( "Who do you wish to use Wither Limb on?\n\r", ch ); return; } if ( ( victim = get_char_room( ch, arg ) ) == NULL ) { send_to_char( "They are not here.\n\r", ch ); return; } if (ch == victim) { send_to_char( "Now that would be really silly...\n\r", ch ); return; } act( "A look of concentration crosses $n's face.", ch, NULL, NULL, TO_ROOM ); WAIT_STATE( ch, 12 ); if ( is_safe(ch, victim) ) { if (!IS_NPC(victim) && ch != victim && IS_MORE(victim, MORE_GUARDIAN)) { guardian_message( victim ); act("$n just failed to use Wither Limb on you.",ch,NULL,victim,TO_VICT); } return; } if (number_percent() > 10 * get_breed(ch,BREED_METIS)) { send_to_char("Nothing happens.\n\r",ch); if (!IS_NPC(victim) && ch != victim && IS_MORE(victim, MORE_GUARDIAN)) { guardian_message( victim ); act("$n just failed to use Wither Limb on you.",ch,NULL,victim,TO_VICT); } return; } if (critical == 1) { if (IS_ARM_L(victim,LOST_ARM)) { send_to_char( "Nothing happens.\n\r", ch ); if (!IS_NPC(victim) && ch != victim && IS_MORE(victim, MORE_GUARDIAN)) { guardian_message( victim ); act("$n just failed to use Wither Limb on you.",ch,NULL,victim,TO_VICT); } return; } SET_BIT(victim->loc_hp[2],LOST_ARM); if (IS_BLEEDING(victim,BLEEDING_HAND_L)) REMOVE_BIT(victim->loc_hp[6],BLEEDING_HAND_L); send_to_char("Your left arm withers up and falls off!\n\r",victim); act("$n's left arm withers up and falls off!",victim,NULL,NULL,TO_ROOM); 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_HOLD )) != 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); if (!IS_NPC(victim) && ch != victim && IS_MORE(victim, MORE_GUARDIAN)) { guardian_message( victim ); act("$n just used Wither Limb on you.",ch,NULL,victim,TO_VICT); } if (IS_NPC(victim)) do_kill(victim,ch->name); return; } else if (critical == 2) { if (IS_ARM_R(victim,LOST_ARM)) { send_to_char( "Nothing happens.\n\r", ch ); if (!IS_NPC(victim) && ch != victim && IS_MORE(victim, MORE_GUARDIAN)) { guardian_message( victim ); act("$n just failed to use Wither Limb on you.",ch,NULL,victim,TO_VICT); } return; } SET_BIT(victim->loc_hp[3],LOST_ARM); if (IS_BLEEDING(victim,BLEEDING_HAND_R)) REMOVE_BIT(victim->loc_hp[6],BLEEDING_HAND_R); send_to_char("Your right arm withers up and falls off!\n\r",victim); act("$n's right arm withers up and falls off!",victim,NULL,NULL,TO_ROOM); 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); if (!IS_NPC(victim) && ch != victim && IS_MORE(victim, MORE_GUARDIAN)) { guardian_message( victim ); act("$n just used Wither Limb on you.",ch,NULL,victim,TO_VICT); } if (IS_NPC(victim)) do_kill(victim,ch->name); return; } else if (critical == 3) { if (IS_LEG_L(victim,LOST_LEG)) { send_to_char( "Nothing happens.\n\r", ch ); if (!IS_NPC(victim) && ch != victim && IS_MORE(victim, MORE_GUARDIAN)) { guardian_message( victim ); act("$n just failed to use Wither Limb on you.",ch,NULL,victim,TO_VICT); } return; } SET_BIT(victim->loc_hp[4],LOST_LEG); if (IS_BLEEDING(victim,BLEEDING_FOOT_L)) REMOVE_BIT(victim->loc_hp[6],BLEEDING_FOOT_L); send_to_char("Your left leg withers up and falls off!\n\r",victim); act("$n's left leg withers up and falls off!",victim,NULL,NULL,TO_ROOM); make_part(victim,"leg"); if (IS_LEG_L(victim,LOST_LEG) && IS_LEG_R(victim,LOST_LEG)) { if ((obj = get_eq_char( victim, WEAR_LEGS )) != NULL) take_item(victim,obj); } if ((obj = get_eq_char( victim, WEAR_FEET )) != NULL) take_item(victim,obj); if (!IS_NPC(victim) && ch != victim && IS_MORE(victim, MORE_GUARDIAN)) { guardian_message( victim ); act("$n just used Wither Limb on you.",ch,NULL,victim,TO_VICT); } if (IS_NPC(victim)) do_kill(victim,ch->name); return; } else if (critical == 4) { if (IS_LEG_R(victim,LOST_LEG)) { send_to_char( "Nothing happens.\n\r", ch ); if (!IS_NPC(victim) && ch != victim && IS_MORE(victim, MORE_GUARDIAN)) { guardian_message( victim ); act("$n just failed to use Wither Limb on you.",ch,NULL,victim,TO_VICT); } return; } SET_BIT(victim->loc_hp[5],LOST_LEG); if (IS_BLEEDING(victim,BLEEDING_FOOT_R)) REMOVE_BIT(victim->loc_hp[6],BLEEDING_FOOT_R); send_to_char("Your right leg withers up and falls off!\n\r",victim); act("$n's right leg withers up and falls off!",victim,NULL,NULL,TO_ROOM); make_part(victim,"leg"); if (IS_LEG_L(victim,LOST_LEG) && IS_LEG_R(victim,LOST_LEG)) { if ((obj = get_eq_char( victim, WEAR_LEGS )) != NULL) take_item(victim,obj); } if ((obj = get_eq_char( victim, WEAR_FEET )) != NULL) take_item(victim,obj); if (!IS_NPC(victim) && ch != victim && IS_MORE(victim, MORE_GUARDIAN)) { guardian_message( victim ); act("$n just used Wither Limb on you.",ch,NULL,victim,TO_VICT); } if (IS_NPC(victim)) do_kill(victim,ch->name); return; } send_to_char("Nothing happens.\n\r",ch); if (!IS_NPC(victim) && ch != victim && IS_MORE(victim, MORE_GUARDIAN)) { guardian_message( victim ); act("$n just failed to use Wither Limb on you.",ch,NULL,victim,TO_VICT); } return; } void do_blur( CHAR_DATA *ch, char *argument ) { if ( IS_NPC(ch) ) return; if (!IS_WEREWOLF(ch)) { send_to_char( "Huh?\n\r", ch ); return; } if (get_auspice(ch, AUSPICE_RAGABASH) < 2) { send_to_char("You require the level 2 Ragabash power to use Blur of the Milky Eye.\n\r",ch); return; } if ( IS_SET(ch->act, PLR_WIZINVIS) ) { REMOVE_BIT(ch->act, PLR_WIZINVIS); send_to_char( "You slowly fade into existance.\n\r", ch ); act("$n slowly fades into existance.",ch,NULL,NULL,TO_ROOM); } else { send_to_char( "You slowly fade out of existance.\n\r", ch ); act("$n slowly fades out of existance.",ch,NULL,NULL,TO_ROOM); SET_BIT(ch->act, PLR_WIZINVIS); } return; } void do_truefear( CHAR_DATA *ch, char *argument ) { CHAR_DATA *victim; AFFECT_DATA af; char arg [MAX_INPUT_LENGTH]; int sn; int level; argument = one_argument( argument, arg ); if (IS_NPC(ch)) return; if (!IS_WEREWOLF(ch)) { send_to_char( "Huh?\n\r", ch ); return; } if (get_auspice(ch, AUSPICE_AHROUN) < 3) { send_to_char("You require the level 3 Ahroun power to use True Fear.\n\r",ch); return; } if (IS_ITEMAFF(ch, ITEMA_PEACE)) do_icy(ch,""); if ( arg[0] == '\0' ) { send_to_char( "Who do you wish to use True Fear on?\n\r", ch ); return; } if ( ( victim = get_char_room( ch, arg ) ) == NULL ) { send_to_char( "They aren't here.\n\r", ch ); return; } if (ch == victim) { send_to_char( "You're pretty scared of yourself!\n\r", ch ); return; } if ( IS_AFFECTED(victim, AFF_FEAR) ) { send_to_char( "They are already pretty scared.\n\r", ch ); if (!IS_NPC(victim) && ch != victim && IS_MORE(victim, MORE_GUARDIAN)) { guardian_message( victim ); act("$n just failed to use True Fear on you.",ch,NULL,victim,TO_VICT); } return; } if ( IS_MORE(victim, MORE_COURAGE) ) { send_to_char( "They are far too brave to be scared so easily.\n\r", ch ); if (!IS_NPC(victim) && ch != victim && IS_MORE(victim, MORE_GUARDIAN)) { guardian_message( victim ); act("$n just failed to use True Fear on you.",ch,NULL,victim,TO_VICT); } return; } if ( is_safe(ch, victim) ) { if (!IS_NPC(victim) && ch != victim && IS_MORE(victim, MORE_GUARDIAN)) { guardian_message( victim ); act("$n just failed to use True Fear on you.",ch,NULL,victim,TO_VICT); } return; } level = get_auspice(ch,AUSPICE_AHROUN) * 10; if ( saves_spell( level, victim ) && victim->position >= POS_FIGHTING ) { act("$E ignores you.",ch,NULL,victim,TO_CHAR); act("You ignore $m.",ch,NULL,victim,TO_VICT); act("$N ignores $n.",ch,NULL,victim,TO_NOTVICT); if (!IS_NPC(victim) && ch != victim && IS_MORE(victim, MORE_GUARDIAN)) { guardian_message( victim ); act("$n just failed to use True Fear on you.",ch,NULL,victim,TO_VICT); } return; } send_to_char("You scream in utter terror!\n\r",victim); act("$n screams in utter terror!",victim,NULL,NULL,TO_ROOM); if (!IS_NPC(victim) && ch != victim && IS_MORE(victim, MORE_GUARDIAN)) { guardian_message( victim ); act("$n just used True Fear on you.",ch,NULL,victim,TO_VICT); } if ( ( sn = skill_lookup( "fear" ) ) < 0 ) { send_to_char( "Bug - please inform Morglum.\n\r", ch ); return; } af.type = sn; af.location = APPLY_HITROLL; af.modifier = 0 - get_disc(ch,DISC_DAIMOINON); af.duration = number_range(1,2); af.bitvector = AFF_FEAR; affect_to_char( victim, &af ); af.location = APPLY_DAMROLL; af.modifier = 0 - get_disc(ch,DISC_DAIMOINON); affect_to_char( victim, &af ); WAIT_STATE( ch, 12 ); return; } void do_scentbeyond( CHAR_DATA *ch, char *argument ) { char arg [MAX_INPUT_LENGTH]; argument = one_argument( argument, arg ); if (IS_NPC(ch)) return; if (!IS_WEREWOLF(ch) ) { send_to_char("Huh?\n\r",ch); return; } if (get_auspice(ch,AUSPICE_THEURGE) < 2) { send_to_char("You require the level 2 power of Theurge to use Scent from Beyond.\n\r",ch); return; } if (IS_VAMPAFF(ch,VAM_SPIRITEYES) ) { send_to_char("You can no longer sense things in the shadowlands.\n\r",ch); REMOVE_BIT(ch->vampaff, VAM_SPIRITEYES); return; } send_to_char("You can now sense things in the shadowlands.\n\r",ch); SET_BIT(ch->vampaff, VAM_SPIRITEYES); return; } void do_disquiet( CHAR_DATA *ch, char *argument ) { CHAR_DATA *victim; char arg [MAX_INPUT_LENGTH]; argument = one_argument( argument, arg ); if (IS_NPC(ch)) return; if (!IS_WEREWOLF(ch)) { send_to_char( "Huh?\n\r", ch ); return; } if (get_breed(ch,BREED_HOMID) < 4) { send_to_char("You require the level 4 Homid power to use Disquiet.\n\r",ch); return; } if ( arg[0] == '\0' ) { send_to_char( "Who do you wish to use Disquiet on?\n\r", ch ); return; } if ( ( victim = get_char_room( ch, arg ) ) == NULL ) { send_to_char( "They are not here.\n\r", ch ); return; } if (IS_NPC(victim)) { send_to_char( "Not on NPC's.\n\r", ch ); return; } act( "A look of concentration crosses $n's face.", ch, NULL, NULL, TO_ROOM ); if (IS_MORE(victim, MORE_CALM)) { send_to_char("You no longer feel so apathetic.\n\r",victim); REMOVE_BIT(victim->more, MORE_CALM); WAIT_STATE( ch, 12 ); return; } if (!IS_NPC(victim) && victim->pcdata->resist[WILL_PRESENCE] > 0 && ch != victim) { send_to_char("They resist you.\n\r",ch); if (!IS_NPC(victim) && ch != victim && IS_MORE(victim, MORE_GUARDIAN)) { guardian_message( victim ); act("$n just failed to use Disquiet on you.",ch,NULL,victim,TO_VICT); } return; } if (!IS_NPC(victim) && IS_WILLPOWER(victim, RES_PRESENCE) && victim->pcdata->willpower[0] >= 10 && ch != victim) { victim->pcdata->willpower[0] -= 10; victim->pcdata->resist[WILL_PRESENCE] = 60; if (!IS_WILLPOWER(victim, RES_TOGGLE)) REMOVE_BIT(victim->pcdata->resist[0], RES_PRESENCE); send_to_char("You burn some willpower to resist Disquiet.\n\r",victim); send_to_char("They resist you.\n\r",ch); if (!IS_NPC(victim) && ch != victim && IS_MORE(victim, MORE_GUARDIAN)) { guardian_message( victim ); act("$n just failed to use Disquiet on you.",ch,NULL,victim,TO_VICT); } return; } if (!IS_NPC(victim) && ch != victim && IS_MORE(victim, MORE_GUARDIAN)) { guardian_message( victim ); act("$n just used Disquiet on you.",ch,NULL,victim,TO_VICT); } if (IS_MORE(victim, MORE_ANGER)) { send_to_char("You no longer feel so angry.\n\r",victim); act("$n regains $s temper.",victim,NULL,NULL,TO_ROOM); REMOVE_BIT(victim->more, MORE_ANGER); WAIT_STATE( ch, 12 ); return; } send_to_char("You suddenly feel very apathetic!\n\r",victim); act("$n yawns and looks around with a bored expression.",victim,NULL,NULL,TO_ROOM); SET_BIT(victim->more, MORE_CALM); WAIT_STATE( ch, 12 ); return; } void do_aeolus( CHAR_DATA *ch, char *argument ) { DESCRIPTOR_DATA *d; CHAR_DATA *victim; char buf[MAX_INPUT_LENGTH]; if (IS_NPC(ch)) return; if (!IS_WEREWOLF(ch)) { send_to_char("Huh?\n\r",ch); return; } if (get_tribe(ch, TRIBE_BLACK_FURIES) < 1) { send_to_char("You require the level 1 power of the Black Furies to use the Curse of Aeolus.\n\r",ch); return; } if (ch->in_room == NULL) { send_to_char("Nothing happens.\n\r",ch); return; } if (ch->pcdata->wpoints > 0) { if (ch->pcdata->wpoints > 1) sprintf(buf,"You cannot call the Curse of Aeolus for another %d seconds.\n\r",ch->pcdata->wpoints); else sprintf(buf,"You cannot call the Curse of Aeolus for another 1 second.\n\r"); send_to_char(buf,ch); return; } if ( ch->in_room->sector_type == SECT_INSIDE || !IS_OUTSIDE(ch) ) { send_to_char("You can only use this power outside.\n\r",ch); return; } act( "A look of concentration crosses $n's face.", ch, NULL, NULL, TO_ROOM ); if (IS_SET(world_affects, WORLD_FOG)) { send_to_char("You banish the fog.\n\r",ch); REMOVE_BIT(world_affects, WORLD_FOG); ch->pcdata->wpoints = 60; for ( d = descriptor_list; d != NULL; d = d->next ) { if ( d->connected != CON_PLAYING ) continue; if ( (victim = d->character) == NULL ) continue; if ( IS_NPC(victim) ) continue; if ( victim->in_room == NULL ) continue; if ( ch == victim ) continue; if ( victim->in_room->sector_type == SECT_INSIDE ) continue; if ( ch->in_room == victim->in_room ) act("$n holds up his arms and the fog disperses.", ch, NULL, victim, TO_VICT); else send_to_char("The fog disperses.\n\r", victim); } } else { send_to_char("You summon a thick blanket of fog.\n\r",ch); SET_BIT(world_affects, WORLD_FOG); ch->pcdata->wpoints = 60; for ( d = descriptor_list; d != NULL; d = d->next ) { if ( d->connected != CON_PLAYING ) continue; if ( (victim = d->character) == NULL ) continue; if ( IS_NPC(victim) ) continue; if ( victim->in_room == NULL ) continue; if ( ch == victim ) continue; if ( victim->in_room->sector_type == SECT_INSIDE ) continue; if ( ch->in_room == victim->in_room ) act("$n holds up his arms and calls forth a thick blanket of fog.", ch, NULL, victim, TO_VICT); else send_to_char("A thick blanket of fog rises from the ground.\n\r", victim); } } return; } void do_porcupine( CHAR_DATA *ch, char *argument ) { if (IS_NPC(ch)) return; if (!IS_WEREWOLF(ch) ) { send_to_char("Huh?\n\r",ch); return; } if (get_breed(ch,BREED_METIS) < 5) { send_to_char("You require the level 5 Metis power to use the Gift of the Porcupine.\n\r",ch); return; } if (!IS_SET(ch->act, PLR_WOLFMAN)) { send_to_char("This power can only be activated in Crinos form.\n\r",ch); return; } if (IS_MORE(ch,MORE_BRISTLES) ) { send_to_char("Your long quill-like spines retract into your body.\n\r",ch); act("$n's long quill-like spines retract into your body.", ch, NULL, NULL, TO_ROOM); REMOVE_BIT(ch->more, MORE_BRISTLES); return; } send_to_char("Long quill-like spines extend from your body.\n\r",ch); act("Long quill-like spines extend from $n's body.", ch, NULL, NULL, TO_ROOM); SET_BIT(ch->more, MORE_BRISTLES); return; } void do_obedience( CHAR_DATA *ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; char action[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; CHAR_DATA *victim; CHAR_DATA *vch_next; int level; argument = one_argument( argument, arg ); if (IS_NPC(ch)) return; if (!IS_WEREWOLF(ch)) { send_to_char( "Huh?\n\r", ch ); return; } if (get_tribe(ch,TRIBE_SHADOW_LORDS) < 5) { send_to_char( "You require the level 5 power of the Shadow Lords to use Obedience on people.\n\r", ch ); return; } if ( ch->in_room == NULL || IS_SET( ch->in_room->room_flags, ROOM_SAFE) ) { STC( "You can't use obedience in safe rooms.\n\r", ch ); return; } if ( arg[0] == '\0' || argument[0] == '\0' ) { send_to_char( "Make whom to do what?\n\r", ch ); return; } strcpy(action,argument); if (is_in(action,"|quit*rem*drop*gift*claim*consent*propose*vampi*ma *maj*sid *side *reca*/*ha *hav*")) { send_to_char( "I think not.\n\r", ch ); return; } level = get_tribe(ch,TRIBE_SHADOW_LORDS) * 5; if (!str_cmp(arg,"all")) { sprintf( buf, "I command everyone to %s", action ); do_say(ch,buf); WAIT_STATE(ch,24); for ( victim = ch->in_room->people; victim != NULL; victim = vch_next ) { vch_next = victim->next_in_room; WAIT_STATE(ch,24); if ( victim == ch ) continue; if ( IS_IMMORTAL(victim) ) continue; if ( IS_NPC(victim) && victim->level >= level ) { act("$s ignores you.",victim,NULL,ch,TO_VICT); continue; } if (!IS_NPC(victim) && victim->pcdata->resist[WILL_DOMINATE] > 0) { act("You ignore $N.",victim,NULL,ch,TO_CHAR); act("$n ignores $N.",victim,NULL,ch,TO_NOTVICT); act("$n ignores you.",victim,NULL,ch,TO_VICT); if (!IS_NPC(victim) && ch != victim && IS_MORE(victim, MORE_GUARDIAN)) { guardian_message( victim ); act("$n just failed to use Obedience on you.",ch,NULL,victim,TO_VICT); } continue; } if (!IS_NPC(victim) && IS_WILLPOWER(victim, RES_DOMINATE) && victim->pcdata->willpower[0] >= 20) { victim->pcdata->willpower[0] -= 20; victim->pcdata->resist[WILL_DOMINATE] = 60; if (!IS_WILLPOWER(victim, RES_TOGGLE)) REMOVE_BIT(victim->pcdata->resist[0], RES_DOMINATE); send_to_char("You burn some willpower to resist Obedience.\n\r",victim); act("You ignore $N.",victim,NULL,ch,TO_CHAR); act("$n ignores $N.",victim,NULL,ch,TO_NOTVICT); act("$n ignores you.",victim,NULL,ch,TO_VICT); if (!IS_NPC(victim) && ch != victim && IS_MORE(victim, MORE_GUARDIAN)) { guardian_message( victim ); act("$n just failed to use Obedience on you.",ch,NULL,victim,TO_VICT); } continue; } act("You obey $N.",victim,NULL,ch,TO_CHAR); if (IS_NPC(victim)) SET_BIT(victim->act, ACT_COMMANDED); interpret( victim, action ); if (IS_NPC(victim)) REMOVE_BIT(victim->act, ACT_COMMANDED); if (!IS_NPC(victim) && ch != victim && IS_MORE(victim, MORE_GUARDIAN)) { guardian_message( victim ); act("$n just used Obedience on you.",ch,NULL,victim,TO_VICT); } } return; } if ( ( victim = get_char_room( ch, arg ) ) == NULL ) { send_to_char( "They aren't here.\n\r", ch ); return; } if ( victim == ch ) { send_to_char( "Now that would be just plain stupid.\n\r", ch ); return; } if ( IS_IMMORTAL(victim) ) { send_to_char( "I think not...\n\r", ch ); return; } if (IS_NPC(victim)) sprintf( buf, "I command %s to %s", victim->short_descr, action ); else if (!IS_NPC(victim) && IS_AFFECTED(victim, AFF_POLYMORPH)) sprintf( buf, "I command %s to %s", victim->morph, action ); else sprintf( buf, "I command %s to %s", victim->name, action ); do_say(ch,buf); WAIT_STATE(ch,24); if ( IS_NPC(victim) && victim->level >= level ) { act("You ignores $N.",victim,NULL,ch,TO_CHAR); act("$n ignores $N.",victim,NULL,ch,TO_NOTVICT); act("$n ignores you.",victim,NULL,ch,TO_VICT); return; } if (!IS_NPC(victim) && victim->pcdata->resist[WILL_DOMINATE] > 0) { act("You ignores $N.",victim,NULL,ch,TO_CHAR); act("$n ignores $N.",victim,NULL,ch,TO_NOTVICT); act("$n ignores you.",victim,NULL,ch,TO_VICT); if (!IS_NPC(victim) && ch != victim && IS_MORE(victim, MORE_GUARDIAN)) { guardian_message( victim ); act("$n just failed to use Obedience on you.",ch,NULL,victim,TO_VICT); } return; } if (!IS_NPC(victim) && IS_WILLPOWER(victim, RES_DOMINATE) && victim->pcdata->willpower[0] >= 10) { victim->pcdata->willpower[0] -= 10; victim->pcdata->resist[WILL_DOMINATE] = 60; if (!IS_WILLPOWER(victim, RES_TOGGLE)) REMOVE_BIT(victim->pcdata->resist[0], RES_DOMINATE); send_to_char("You burn some willpower to resist Obedience.\n\r",victim); act("You ignores $N.",victim,NULL,ch,TO_CHAR); act("$n ignores $N.",victim,NULL,ch,TO_NOTVICT); act("$n ignores you.",victim,NULL,ch,TO_VICT); if (!IS_NPC(victim) && ch != victim && IS_MORE(victim, MORE_GUARDIAN)) { guardian_message( victim ); act("$n just failed to use Obedience on you.",ch,NULL,victim,TO_VICT); } return; } act("You obey $N.",victim,NULL,ch,TO_CHAR); if (IS_NPC(victim)) SET_BIT(victim->act, ACT_COMMANDED); interpret( victim, action ); if (IS_NPC(victim)) REMOVE_BIT(victim->act, ACT_COMMANDED); if (!IS_NPC(victim) && ch != victim && IS_MORE(victim, MORE_GUARDIAN)) { guardian_message( victim ); act("$n just used Obedience on you.",ch,NULL,victim,TO_VICT); } return; } void do_paralyzing( CHAR_DATA *ch, char *argument ) { CHAR_DATA *victim; char arg [MAX_INPUT_LENGTH]; argument = one_argument( argument, arg ); if (IS_NPC(ch)) return; if (!IS_WEREWOLF(ch)) { send_to_char( "Huh?\n\r", ch ); return; } if (get_tribe(ch,TRIBE_SHADOW_LORDS) < 4) { send_to_char( "You require the level 4 power of the Shadow Lords to use Paralyzing Stare.\n\r", ch ); return; } if ( ( victim = get_char_room( ch, arg ) ) == NULL ) { send_to_char( "They aren't here.\n\r", ch ); return; } if (ch == victim) { send_to_char( "I think not...\n\r", ch ); return; } act("You stare deeply into $N's eyes.",ch,NULL,victim,TO_CHAR); act("$n stares deeply into $N's eyes.",ch,NULL,victim,TO_NOTVICT); act("$n stares deeply into your eyes.",ch,NULL,victim,TO_VICT); if (is_safe(ch,victim)) { if (!IS_NPC(victim) && ch != victim && IS_MORE(victim, MORE_GUARDIAN)) { guardian_message( victim ); act("$n just failed to use Paralyzing Stare on you.",ch,NULL,victim,TO_VICT); } return; } act("You stare back into $N's eyes.",victim,NULL,ch,TO_CHAR); act("$n stares back into $N's eyes.",victim,NULL,ch,TO_NOTVICT); act("$n stares back into your eyes.",victim,NULL,ch,TO_VICT); send_to_char( "You paralyze them with your stare!\n\r", ch ); send_to_char( "You are momentarily paralyzed!\n\r", victim ); if (!IS_NPC(victim) && ch != victim && IS_MORE(victim, MORE_GUARDIAN)) { guardian_message( victim ); act("$n just used Paralyzing stare on you.",ch,NULL,victim,TO_VICT); } WAIT_STATE( ch, 24 ); WAIT_STATE( victim, 24 ); return; } void do_icy( CHAR_DATA *ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; char buf[MAX_INPUT_LENGTH]; argument = one_argument( argument, arg ); if (IS_NPC(ch)) return; if (!IS_WEREWOLF(ch) ) { send_to_char("Huh?\n\r",ch); return; } if (get_tribe(ch,TRIBE_SHADOW_LORDS) < 3) { send_to_char( "You require the level 3 power of the Shadow Lords to use Icy Chill of Despair.\n\r", ch ); return; } if (IS_ITEMAFF(ch,ITEMA_PEACE) ) { send_to_char("You stop using the Icy Chill of Despair.\n\r",ch); act("$n no longer seems so scary.", ch, NULL, NULL, TO_ROOM); REMOVE_BIT(ch->itemaffect, ITEMA_PEACE); ch->pcdata->majesty = 120; return; } if (ch->pcdata->majesty > 0) { if (ch->pcdata->majesty > 1) sprintf(buf,"You cannot use the Icy Chill of Despair for another %d seconds.\n\r",ch->pcdata->majesty); else sprintf(buf,"You cannot use the Icy Chill of Despair for another 1 second.\n\r"); send_to_char(buf,ch); return; } send_to_char("Your start using the Icy Chill of Despair.\n\r",ch); act("$n suddenly appears really scary.", ch, NULL, NULL, TO_ROOM); SET_BIT(ch->itemaffect, ITEMA_PEACE); return; } void do_clap( CHAR_DATA *ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; CHAR_DATA *victim; CHAR_DATA *victim_next; int damage; bool no_dam = FALSE; one_argument( argument, arg ); if (IS_NPC(ch)) no_dam = TRUE; else { if (!IS_WEREWOLF(ch)) no_dam = TRUE; else if (get_tribe(ch,TRIBE_SHADOW_LORDS) < 2) no_dam = TRUE; } { send_to_char( "You clap your hands together.\n\r", ch ); act("$n claps $s hands together.",ch,NULL,NULL,TO_ROOM); if (no_dam) return; if (IS_ITEMAFF(ch, ITEMA_PEACE)) do_majesty(ch,""); damage = get_tribe(ch, TRIBE_SHADOW_LORDS) * number_range(5,10); for ( victim = ch->in_room->people; victim; victim = victim_next ) { victim_next = victim->next_in_room; if ( victim == ch ) continue; if (IS_IMMORTAL(victim)) continue; if (is_safe(ch,victim)) { if (!IS_NPC(victim) && ch != victim && IS_MORE(victim, MORE_GUARDIAN)) { guardian_message( victim ); act("$n just used Clap of Thunder on you.",ch,NULL,victim,TO_VICT); } return; } act("The room reverberates with a huge roll of thunder!",victim,NULL,NULL,TO_ROOM); send_to_char("The room reverberates with a huge roll of thunder!\n\r",victim); send_to_char("You clutch your head in agony as your eardrums seem to explode!\n\r",victim); act("$n clutches $s head in agony!",victim,NULL,NULL,TO_ROOM); if (!IS_NPC(victim) && ch != victim && IS_MORE(victim, MORE_GUARDIAN)) { guardian_message( victim ); act4("$n just used Clap of Thunder on you.",ch,NULL,victim,TO_VICT); } victim->hit -= damage; if ((IS_NPC(victim) && victim->hit < 1) || (!IS_NPC(victim) && victim->hit < -10)) { act("$n's body falls limply to the ground.",victim,NULL,NULL,TO_ROOM); group_gain(ch,victim); victim->form = 11; killperson(ch,victim); } else { update_pos(victim); if (number_range(1,20) <= get_disc(ch,DISC_MELPOMINEE)) { victim->position = POS_STUNNED; send_to_char("You fall to the ground, stunned!\n\r",ch); act("$n falls to the ground, stunned!",victim,NULL,NULL,TO_ROOM); } else if (IS_NPC(victim)) multi_hit(victim,ch,TYPE_UNDEFINED); } } WAIT_STATE( ch, 24 ); return; } return; } void do_fetishdoll( CHAR_DATA *ch, char *argument ) { CHAR_DATA *victim; OBJ_DATA *obj; char buf [MAX_INPUT_LENGTH]; char arg [MAX_INPUT_LENGTH]; char part1 [MAX_INPUT_LENGTH]; char part2 [MAX_INPUT_LENGTH]; int worn; one_argument( argument, arg ); if (IS_NPC(ch)) return; if (!IS_WEREWOLF(ch) ) { send_to_char("Huh?\n\r",ch); return; } if (get_tribe(ch,TRIBE_UKTENA) < 5) { send_to_char( "You require the level 5 power of the Uktena to create a Fetish Doll.\n\r", ch ); return; } if (arg[0] == '\0') { send_to_char( "Who do you wish to make a Fetish Doll of?\n\r", ch ); return; } if ( ( victim = get_char_world( ch, arg ) ) == NULL ) { send_to_char( "Nobody by that name is playing.\n\r", ch ); return; } if ( ( obj = get_eq_char( ch, WEAR_WIELD ) ) == NULL ) { if ( ( obj = get_eq_char( ch, WEAR_HOLD ) ) == NULL ) { send_to_char( "You are not holding any body parts.\n\r", ch ); return; } else worn = WEAR_HOLD; } else worn = WEAR_WIELD; if ( IS_NPC(victim) ) { send_to_char( "Not on NPC's.\n\r", ch ); return; } if (obj->value[2] == 12) sprintf(part1,"head %s",victim->name); else if (obj->value[2] == 13) sprintf(part1,"heart %s",victim->name); else if (obj->value[2] == 14) sprintf(part1,"arm %s",victim->name); else if (obj->value[2] == 15) sprintf(part1,"leg %s",victim->name); else if (obj->value[2] == 30004) sprintf(part1,"entrails %s",victim->name); else if (obj->value[2] == 30005) sprintf(part1,"brain %s",victim->name); else if (obj->value[2] == 30006) sprintf(part1,"eye eyeball %s",victim->name); else if (obj->value[2] == 30012) sprintf(part1,"face %s",victim->name); else if (obj->value[2] == 30013) sprintf(part1,"windpipe %s",victim->name); else if (obj->value[2] == 30014) sprintf(part1,"cracked head %s",victim->name); else if (obj->value[2] == 30025) sprintf(part1,"ear %s",victim->name); else if (obj->value[2] == 30026) sprintf(part1,"nose %s",victim->name); else if (obj->value[2] == 30027) sprintf(part1,"tooth %s",victim->name); else if (obj->value[2] == 30028) sprintf(part1,"tongue %s",victim->name); else if (obj->value[2] == 30029) sprintf(part1,"hand %s",victim->name); else if (obj->value[2] == 30030) sprintf(part1,"foot %s",victim->name); else if (obj->value[2] == 30031) sprintf(part1,"thumb %s",victim->name); else if (obj->value[2] == 30032) sprintf(part1,"index finger %s",victim->name); else if (obj->value[2] == 30033) sprintf(part1,"middle finger %s",victim->name); else if (obj->value[2] == 30034) sprintf(part1,"ring finger %s",victim->name); else if (obj->value[2] == 30035) sprintf(part1,"little finger %s",victim->name); else if (obj->value[2] == 30036) sprintf(part1,"toe %s",victim->name); else { sprintf(buf,"%s isn't a part of %s!\n\r",obj->name,victim->name); send_to_char( buf, ch ); return; } sprintf(part2,obj->name); if ( str_cmp(part1,part2) ) { sprintf(buf,"But you are holding %s, not %s!\n\r",obj->short_descr,victim->name); send_to_char( buf, ch ); return; } act("$p vanishes from your hand in a puff of smoke.", ch, obj, NULL, TO_CHAR); act("$p vanishes from $n's hand in a puff of smoke.", ch, obj, NULL, TO_ROOM); obj_from_char(obj); extract_obj(obj); obj = create_object( get_obj_index( OBJ_VNUM_VOODOO_DOLL ), 0 ); sprintf(buf,"%s voodoo doll",victim->name); free_string(obj->name); obj->name=str_dup(buf); sprintf(buf,"a voodoo doll of %s",victim->name); free_string(obj->short_descr); obj->short_descr=str_dup(buf); sprintf(buf,"A voodoo doll of %s lies here.",victim->name); free_string(obj->description); obj->description=str_dup(buf); obj_to_char(obj,ch); equip_char(ch,obj,worn); act("$p appears in your hand.", ch, obj, NULL, TO_CHAR); act("$p appears in $n's hand.", ch, obj, NULL, TO_ROOM); return; } void do_invisibility( CHAR_DATA *ch, char *argument ) { int sn; if (IS_NPC(ch)) return; if (!IS_WEREWOLF(ch)) { send_to_char( "Huh?\n\r", ch ); return; } if (get_tribe(ch,TRIBE_UKTENA) < 4) { send_to_char("You require the level 4 power of the Uktena to use Invisibility.\n\r",ch); return; } if (IS_AFFECTED(ch, AFF_INVISIBLE)) { send_to_char("But you are already invisible!\n\r",ch); return; } act( "A look of concentration crosses $n's face.", ch, NULL, NULL, TO_ROOM ); if ( ( sn = skill_lookup( "invis" ) ) < 0 ) return; (*skill_table[sn].spell_fun) ( sn, 50, ch, ch ); WAIT_STATE( ch, 12 ); return; } void do_wallgranite( CHAR_DATA *ch, char *argument ) { OBJ_DATA *obj; EXIT_DATA *pexit; ROOM_INDEX_DATA *location; ROOM_INDEX_DATA *to_room; char arg [MAX_INPUT_LENGTH]; char buf [MAX_INPUT_LENGTH]; int duration = number_range(15,30); int direction, rev; one_argument( argument, arg ); if (IS_NPC(ch)) return; if (!IS_WEREWOLF(ch)) { send_to_char("Huh?\n\r",ch); return; } if (get_auspice(ch,AUSPICE_PHILODOX) < 5) { send_to_char("You require the level 5 power of Philodox create a Wall of Granite.\n\r",ch); return; } if ( arg[0] == '\0') { send_to_char( "Which direction do you wish to make the wall?\n\r", ch ); return; } if (!str_cmp(arg,"north") || !str_cmp(arg,"n")) {direction = DIR_NORTH; rev = DIR_SOUTH;} else if (!str_cmp(arg,"south") || !str_cmp(arg,"s")) {direction = DIR_SOUTH; rev = DIR_NORTH;} else if (!str_cmp(arg,"east") || !str_cmp(arg,"e")) {direction = DIR_EAST; rev = DIR_WEST;} else if (!str_cmp(arg,"west") || !str_cmp(arg,"w")) {direction = DIR_WEST; rev = DIR_EAST;} else if (!str_cmp(arg,"up") || !str_cmp(arg,"u")) {direction = DIR_UP; rev = DIR_DOWN;} else if (!str_cmp(arg,"down") || !str_cmp(arg,"d")) {direction = DIR_DOWN; rev = DIR_UP;} else { send_to_char( "Select direction: North, South, East, West, Up or Down.\n\r", ch ); return; } switch (direction) { default: strcpy(arg,"north"); break; case DIR_NORTH: strcpy(arg,"north"); break; case DIR_SOUTH: strcpy(arg,"south"); break; case DIR_EAST: strcpy(arg,"east"); break; case DIR_WEST: strcpy(arg,"west"); break; case DIR_UP: strcpy(arg,"up"); break; case DIR_DOWN: strcpy(arg,"down"); break; } if ( ( pexit = ch->in_room->exit[direction] ) == NULL ) { send_to_char("Nothing happens.\n\r",ch); return; } if ( ( location = ch->in_room ) == NULL ) { send_to_char("Nothing happens.\n\r",ch); return; } if ( ( to_room = pexit->to_room ) == NULL ) { send_to_char("Nothing happens.\n\r",ch); return; } if (IS_SET(pexit->exit_info, EX_WALL_WATER) || IS_SET(pexit->exit_info, EX_WALL_GRANITE) || IS_SET(pexit->exit_info, EX_WALL_FLAME)) { send_to_char("There is already a wall blocking that exit.\n\r",ch); return; } act( "A look of concentration crosses $n's face.", ch, NULL, NULL, TO_ROOM ); obj = create_object( get_obj_index( OBJ_VNUM_PORTAL ), 0 ); obj->item_type = ITEM_WALL; obj->value[0] = direction; obj->timer = duration; free_string(obj->name); obj->name = str_dup("wall stone granite"); free_string(obj->short_descr); obj->short_descr = str_dup("a wall of granite"); sprintf(buf,"A wall of solid granite blocks your exit %s.",arg); free_string(obj->description); obj->description = str_dup(buf); obj_to_room( obj, ch->in_room ); SET_BIT(pexit->exit_info, EX_WALL_GRANITE); if (direction == DIR_UP) sprintf(buf,"Stone erupts from the ground and forms a wall above you."); else if (direction == DIR_DOWN) sprintf(buf,"Stone erupts from the ground and forms a wall below you."); else sprintf(buf,"Stone erupts from the ground and forms a wall to the %s.",arg); act( buf, ch, NULL, NULL, TO_CHAR ); act( buf, ch, NULL, NULL, TO_ROOM ); WAIT_STATE(ch,12); if (location == to_room) return; char_from_room(ch); char_to_room(ch, to_room); if ( ( pexit = ch->in_room->exit[rev] ) == NULL ) return; if (IS_SET(pexit->exit_info, EX_WALL_WATER) || IS_SET(pexit->exit_info, EX_WALL_GRANITE) || IS_SET(pexit->exit_info, EX_WALL_FLAME)) return; switch (rev) { default: strcpy(arg,"north"); break; case DIR_NORTH: strcpy(arg,"north"); break; case DIR_SOUTH: strcpy(arg,"south"); break; case DIR_EAST: strcpy(arg,"east"); break; case DIR_WEST: strcpy(arg,"west"); break; case DIR_UP: strcpy(arg,"up"); break; case DIR_DOWN: strcpy(arg,"down"); break; } obj = create_object( get_obj_index( OBJ_VNUM_PORTAL ), 0 ); obj->item_type = ITEM_WALL; obj->value[0] = rev; obj->timer = duration; free_string(obj->name); obj->name = str_dup("wall stone granite"); free_string(obj->short_descr); obj->short_descr = str_dup("a wall of granite"); sprintf(buf,"A wall of solid granite blocks your exit %s.",arg); free_string(obj->description); obj->description = str_dup(buf); obj_to_room( obj, ch->in_room ); SET_BIT(pexit->exit_info, EX_WALL_GRANITE); if (rev == DIR_UP) sprintf(buf,"Stone erupts from the ground and forms a wall above you."); else if (rev == DIR_DOWN) sprintf(buf,"Stone erupts from the ground and forms a wall below you."); else sprintf(buf,"Stone erupts from the ground and forms a wall to the %s.",arg); act( buf, ch, NULL, NULL, TO_ROOM ); char_from_room(ch); char_to_room(ch, location); return; } void do_camouflage( CHAR_DATA *ch, char *argument ) { if (IS_NPC(ch)) return; if (!IS_WEREWOLF(ch)) { send_to_char( "Huh?\n\r", ch ); return; } if (get_tribe(ch,TRIBE_WENDIGOS) < 1) { send_to_char("You require the level 1 power of the Wendigos to use Camouflage.\n\r",ch); return; } if (IS_AFFECTED(ch, AFF_HIDE)) { send_to_char( "You are already camouflaging yourself.\n\r", ch ); return; } act( "A look of concentration crosses $n's face.", ch, NULL, NULL, TO_ROOM ); if (!IS_AFFECTED(ch, AFF_HIDE)) { act("$n seems to blend into the shadows.",ch,NULL,NULL,TO_ROOM); send_to_char("You Camouflage yourself.\n\r",ch); SET_BIT(ch->affected_by, AFF_HIDE); } WAIT_STATE( ch, 12 ); return; } void do_reshape( CHAR_DATA *ch, char *argument ) { OBJ_DATA *obj; char arg1[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; char buf [MAX_STRING_LENGTH]; char buf2[MSL]; char buf3[MSL]; char endchar[15]; smash_tilde( argument ); argument = one_argument( argument, arg1 ); argument = one_argument( argument, arg2 ); if (IS_NPC(ch)) return; if (!IS_WEREWOLF(ch)) { send_to_char( "Huh?\n\r", ch ); return; } if (get_breed(ch, BREED_HOMID) < 3) { send_to_char("You require the level 3 Homid power to use Reshape Object.\n\r",ch); return; } if ( arg1[0] == '\0' || arg2[0] == '\0' || argument[0] == '\0' ) { send_to_char( "Syntax: Reshape <object> rename <short description>\n\r", ch ); send_to_char( "Syntax: Reshape <object> keyword <extra keyword/s>\n\r", ch ); send_to_char( "Syntax: Reshape <object> flags <glow/hum>\n\r", ch ); return; } if ( ( obj = get_obj_carry( ch, arg1 ) ) == NULL ) { send_to_char( "You are not carrying that object.\n\r", ch ); return; } if (obj->item_type == ITEM_QUEST || obj->item_type == ITEM_AMMO || obj->item_type == ITEM_EGG || obj->item_type == ITEM_VOODOO || obj->item_type == ITEM_MONEY || obj->item_type == ITEM_TREASURE || obj->item_type == ITEM_TOOL || obj->item_type == ITEM_SYMBOL || obj->item_type == ITEM_PAGE || IS_SET(obj->quest, QUEST_ARTIFACT)) { send_to_char( "You cannot quest-change that item.\n\r", ch ); return; } if (!IS_IMMORTAL(ch) && (obj->questowner == NULL || str_cmp(ch->name,obj->questowner))) { send_to_char("You can only change an item you own.\n\r", ch); return; } if ( !str_cmp( arg2, "rename" ) ) { if (IS_SET(obj->quest, QUEST_RELIC)) { send_to_char("Not on a relic.\n\r",ch); return; } if (strlen(argument) < 5) { send_to_char("Name should be at least 5 characters long.\n\r",ch); return; } strcpy(argument,capitalize(argument)); argument[0] = LOWER(argument[0]); endchar[0] = (argument[strlen(argument)-1]); endchar[1] = '\0'; if (!str_cmp(endchar,".")) argument[strlen(argument)-1] = '\0'; strcpy( buf2, argument ); sprintf( buf3, "%s", strip_small_args( buf2 ) ); FILL_STRING( obj->name, buf3 ); FILL_STRING( obj->short_descr, argument ); if (is_in(argument,"|pair of*")) sprintf(buf, "%s are lying here.",argument); else sprintf(buf, "%s is lying here.",argument); buf[0] = UPPER(buf[0]); FILL_STRING( obj->description, buf ); send_to_char("Ok.\n\r",ch); FILL_STRING( obj->questmaker, ch->name ); return; } if ( !str_cmp( arg2, "keyword" ) || !str_cmp( arg2, "keywords" ) ) { if (IS_SET(obj->quest, QUEST_RELIC)) { send_to_char("Not on a relic.\n\r",ch); return; } if (strlen(argument) < 3) { send_to_char("Keywords should be at least 3 characters long.\n\r",ch); return; } strcpy(argument,capitalize(argument)); argument[0] = LOWER(argument[0]); endchar[0] = (argument[strlen(argument)-1]); endchar[1] = '\0'; if (!str_cmp(endchar,".")) argument[strlen(argument)-1] = '\0'; strcpy(buf,obj->name); if (strlen(buf) > 80) { send_to_char("You cannot fit any more keywords on this object.\n\r",ch); return; } strcat(buf," "); strcat(buf,argument); FILL_STRING( obj->name, buf ); send_to_char("Ok.\n\r",ch); FILL_STRING( obj->questmaker, ch->name ); return; } if ( !str_cmp( arg2, "flags" ) ) { if (!str_cmp(argument,"glow")) { if (IS_SET(obj->extra_flags, ITEM_GLOW)) REMOVE_BIT(obj->extra_flags, ITEM_GLOW); else SET_BIT(obj->extra_flags, ITEM_GLOW); } else if (!str_cmp(argument,"hum")) { if (IS_SET(obj->extra_flags, ITEM_HUM)) REMOVE_BIT(obj->extra_flags, ITEM_HUM); else SET_BIT(obj->extra_flags, ITEM_HUM); } else { send_to_char( "Syntax: Reshape <object> flags <glow/hum>\n\r", ch ); return; } send_to_char("Ok.\n\r",ch); if (obj->questmaker != NULL) free_string(obj->questmaker); obj->questmaker = str_dup(ch->name); return; } send_to_char( "Syntax: Reshape <object> rename <short description>\n\r", ch ); send_to_char( "Syntax: Reshape <object> keyword <extra keyword/s>\n\r", ch ); send_to_char( "Syntax: Reshape <object> flags <glow/hum>\n\r", ch ); return; } void do_teachgift( CHAR_DATA *ch, char *argument ) { char buf [MAX_INPUT_LENGTH]; char arg1 [MAX_INPUT_LENGTH]; char arg2 [MAX_INPUT_LENGTH]; char disc [25]; CHAR_DATA *victim; int improve, sn, col, gtype; smash_tilde(argument); argument = one_argument( argument, arg1 ); strcpy(arg2,argument); if (IS_NPC(ch)) return; if (!IS_WEREWOLF(ch) ) { send_to_char("Huh?\n\r",ch); return; } if ( arg1[0] == '\0' || arg2[0] == '\0' ) { send_to_char( "Syntax: teach <person> <gift>\n\r", ch ); send_to_char( "The following list contains your gifts and the level you can teach to.\n\r", ch ); send_to_char( "--------------------------------------------------------------------------------\n\r", ch ); col = 0; for ( sn = 0; sn <= BREED_MAX; sn++ ) { if ( ch->pcdata->breed[sn] == 0 ) continue; switch (sn) { default: strcpy(disc,"None"); break; case BREED_HOMID: strcpy(disc,"Homid"); break; case BREED_LUPUS: strcpy(disc,"Lupus"); break; case BREED_METIS: strcpy(disc,"Metis"); break; } } for ( sn = 0; sn <= AUSPICE_MAX; sn++ ) { if ( ch->pcdata->auspice[sn] == 0 ) continue; switch (sn) { default: strcpy(disc,"None"); break; case AUSPICE_RAGABASH: strcpy(disc,"Ragabash"); break; case AUSPICE_THEURGE: strcpy(disc,"Theurge"); break; case AUSPICE_PHILODOX: strcpy(disc,"Philodox"); break; case AUSPICE_GALLIARD: strcpy(disc,"Galliard"); break; case AUSPICE_AHROUN: strcpy(disc,"Ahroun"); break; } } for ( sn = 0; sn <= TRIBE_MAX; sn++ ) { if ( ch->pcdata->tribes[sn] == 0 ) continue; switch (sn) { default: strcpy(disc,"None"); break; case TRIBE_BLACK_FURIES: strcpy(disc,"Black Furies"); break; case TRIBE_BONE_GNAWERS: strcpy(disc,"Bone Gnawers"); break; case TRIBE_CHILDREN_OF_GAIA: strcpy(disc,"Children of Gaia"); break; case TRIBE_FIANNA: strcpy(disc,"Fianna"); break; case TRIBE_GET_OF_FENRIS: strcpy(disc,"Get of Fenris"); break; case TRIBE_GLASS_WALKERS: strcpy(disc,"Glass Walkers"); break; case TRIBE_RED_TALONS: strcpy(disc,"Red Talons"); break; case TRIBE_SHADOW_LORDS: strcpy(disc,"Shadow Lords"); break; case TRIBE_SILENT_STRIDERS: strcpy(disc,"Silent Striders"); break; case TRIBE_SILVER_FANGS: strcpy(disc,"Silver Fangs"); break; case TRIBE_STARGAZERS: strcpy(disc,"Stargazers"); break; case TRIBE_UKTENA: strcpy(disc,"Uktena"); break; case TRIBE_WENDIGOS: strcpy(disc,"Wendigos"); break; } } if ( col % 3 != 0 ) send_to_char( "\n\r", ch ); send_to_char( "--------------------------------------------------------------------------------\n\r", ch ); return; } if ( ( victim = get_char_room( ch, arg1 ) ) == NULL ) { send_to_char( "They aren't here.\n\r", ch ); return; } if ( ch == victim ) { send_to_char( "You cannot teach yourself!\n\r", ch ); return; } if (IS_NPC(victim)) { send_to_char( "Not on NPC's.\n\r", ch ); return; } if (!str_cmp(arg2,"homid")) {improve = BREED_HOMID;gtype = 0;} else if (!str_cmp(arg2,"lupus")) {improve = BREED_LUPUS;gtype = 0;} else if (!str_cmp(arg2,"metis")) {improve = BREED_METIS;gtype = 0;} else if (!str_cmp(arg2,"ragabash")) {improve = AUSPICE_RAGABASH;gtype = 1;} else if (!str_cmp(arg2,"theurge")) {improve = AUSPICE_THEURGE;gtype = 1;} else if (!str_cmp(arg2,"philodox")) {improve = AUSPICE_PHILODOX;gtype = 1;} else if (!str_cmp(arg2,"galliard")) {improve = AUSPICE_GALLIARD;gtype = 1;} else if (!str_cmp(arg2,"ahroun")) {improve = AUSPICE_AHROUN;gtype = 1;} else if (!str_cmp(arg2,"black furies")) {improve = TRIBE_BLACK_FURIES;gtype = 2;} else if (!str_cmp(arg2,"bone gnawers")) {improve = TRIBE_BONE_GNAWERS;gtype = 2;} else if (!str_cmp(arg2,"children of gaia")) {improve = TRIBE_CHILDREN_OF_GAIA;gtype = 2;} else if (!str_cmp(arg2,"fianna")) {improve = TRIBE_FIANNA;gtype = 2;} else if (!str_cmp(arg2,"get of fenris")) {improve = TRIBE_GET_OF_FENRIS;gtype = 2;} else if (!str_cmp(arg2,"get of fenris")) {improve = TRIBE_GET_OF_FENRIS;gtype = 2;} else if (!str_cmp(arg2,"glass walkers")) {improve = TRIBE_GLASS_WALKERS;gtype = 2;} else if (!str_cmp(arg2,"red talons")) {improve = TRIBE_RED_TALONS;gtype = 2;} else if (!str_cmp(arg2,"shadow lords")) {improve = TRIBE_SHADOW_LORDS;gtype = 2;} else if (!str_cmp(arg2,"silent striders")) {improve = TRIBE_SILENT_STRIDERS;gtype = 2;} else if (!str_cmp(arg2,"silver fangs")) {improve = TRIBE_SILVER_FANGS;gtype = 2;} else if (!str_cmp(arg2,"stargazers")) {improve = TRIBE_STARGAZERS;gtype = 2;} else if (!str_cmp(arg2,"uktena")) {improve = TRIBE_UKTENA;gtype = 2;} else if (!str_cmp(arg2,"wendigos")) {improve = TRIBE_WENDIGOS;gtype = 2;} else { send_to_char("You know of no such gift.\n\r",ch); return; } switch (gtype) { default: if (ch->pcdata->breed[improve] == 0) { send_to_char("You know of no such breed power.\n\r",ch); return; } if (ch->pcdata->breed[improve] < 3) { send_to_char("You require level 3 in a gift before you can teach it.\n\r",ch); return; } break; case 1: if (ch->pcdata->auspice[improve] == 0) { send_to_char("You know of no such auspice power.\n\r",ch); return; } if (ch->pcdata->auspice[improve] < 3) { send_to_char("You require level 3 in a gift before you can teach it.\n\r",ch); return; } break; case 2: if (ch->pcdata->tribes[improve] == 0) { send_to_char("You know of no such tribe power.\n\r",ch); return; } if (ch->pcdata->tribes[improve] < 3) { send_to_char("You require level 3 in a gift before you can teach it.\n\r",ch); return; } break; } if (!IS_WEREWOLF(victim)) { send_to_char("They are unable to learn gifts.\n\r",ch); return; } if (!IS_IMMUNE(victim, IMM_VAMPIRE)) { send_to_char("They refuse to learn any gifts.\n\r",ch); return; } switch (gtype) { default: if (victim->pcdata->breed[improve] != 0) { send_to_char("They already know that gift.\n\r",ch); return; } victim->pcdata->breed[improve] = -1; break; case 1: if (victim->pcdata->auspice[improve] != 0) { send_to_char("They already know that gift.\n\r",ch); return; } victim->pcdata->auspice[improve] = -1; break; case 2: if (victim->pcdata->tribes[improve] != 0) { send_to_char("They already know that gift.\n\r",ch); return; } victim->pcdata->tribes[improve] = -1; break; } sprintf(buf,"You teach $N how to use the %s gift.",capitalize(arg2)); act(buf,ch,NULL,victim,TO_CHAR); sprintf(buf,"$n teaches you how to use the %s gift.",capitalize(arg2)); act(buf,ch,NULL,victim,TO_VICT); return; } void do_halosun( CHAR_DATA *ch, char *argument ) { if (IS_NPC(ch)) return; if (!IS_WEREWOLF(ch) ) { send_to_char("Huh?\n\r",ch); return; } if (get_tribe(ch,TRIBE_CHILDREN_OF_GAIA) < 5) { send_to_char("You require the level 5 Children of Gaia power to use the Halo of the Sun.\n\r",ch); return; } if (IS_ITEMAFF(ch,ITEMA_SUNSHIELD) ) { send_to_char("Your Halo of the Sun gradually fades away.\n\r",ch); act("$n's Halo of the Sun gradually fades away.", ch, NULL, NULL, TO_ROOM); REMOVE_BIT(ch->itemaffect, ITEMA_SUNSHIELD); return; } send_to_char("You are surrounded by a halo of sunlight!\n\r",ch); act("$n is surrounded by a halo of sunlight!", ch, NULL, NULL, TO_ROOM); SET_BIT(ch->itemaffect, ITEMA_SUNSHIELD); return; } void do_mother( CHAR_DATA *ch, char *argument ) { CHAR_DATA *victim; char arg [MAX_INPUT_LENGTH]; char buf [MAX_STRING_LENGTH]; argument = one_argument( argument, arg ); if (IS_NPC(ch)) return; if (!IS_WEREWOLF(ch)) { send_to_char( "Huh?\n\r", ch ); return; } if (get_auspice(ch,AUSPICE_THEURGE) < 1) { send_to_char("You require the level 1 Theurge power to use Mother's Touch.\n\r",ch); return; } if (ch->pcdata->obeah > 0) { if (ch->pcdata->obeah > 1) sprintf(buf,"You cannot call upon your healing powers for another %d seconds.\n\r",ch->pcdata->obeah); else sprintf(buf,"You cannot call upon your healing powers for another 1 second.\n\r"); send_to_char(buf,ch); return; } if ( arg[0] == '\0' ) { send_to_char( "Who do you want to heal with Mother's Touch?\n\r", ch ); return; } if ( ( victim = get_char_room( ch, arg ) ) == NULL ) { send_to_char( "They are not here.\n\r", ch ); return; } if (IS_EVIL(victim)) { send_to_char( "They are too evil to benefit from your healing powers.\n\r", ch ); return; } if (ch == victim) { send_to_char( "You cannot use this power upon yourself.\n\r", ch ); return; } if (victim->loc_hp[6] > 0) { int sn = skill_lookup( "clot" ); act( "You lay your hands upon $N.", ch, NULL, victim, TO_CHAR ); act( "$n's lays $s hands upon $N.", ch, NULL, victim, TO_NOTVICT ); act( "$n's lays $s hands upon you.", ch, NULL, victim, TO_VICT ); ch->pcdata->obeah = 10; (*skill_table[sn].spell_fun) (sn,ch->level,ch,victim); } else { if ((victim->loc_hp[0] + victim->loc_hp[1] + victim->loc_hp[2] + victim->loc_hp[3] + victim->loc_hp[4] + victim->loc_hp[5]) != 0) { act( "You lay your hands upon $N.", ch, NULL, victim, TO_CHAR ); act( "$n's lays $s hands upon $N.", ch, NULL, victim, TO_NOTVICT ); act( "$n's lays $s hands upon you.", ch, NULL, victim, TO_VICT ); ch->pcdata->obeah = 20; reg_mend(victim); } else if (victim->hit < victim->max_hit) { victim->hit += get_auspice(ch, AUSPICE_THEURGE) * 1000; victim->agg -= get_auspice(ch, AUSPICE_THEURGE) * 2; if (victim->agg < 0) victim->agg = 0; act( "You lay your hands upon $N.", ch, NULL, victim, TO_CHAR ); act( "$n's lays $s hands upon $N.", ch, NULL, victim, TO_NOTVICT ); act( "$n's lays $s hands upon you.", ch, NULL, victim, TO_VICT ); ch->pcdata->obeah = 30; update_pos(victim); if (victim->hit >= victim->max_hit) { victim->hit = victim->max_hit; send_to_char("You have been completely healed!\n\r",victim); act("$n's wounds have been completely healed!",victim,NULL,NULL,TO_ROOM); } else { send_to_char("Your wounds begin to heal!\n\r",victim); act("$n's wounds begin to heal!",victim,NULL,NULL,TO_ROOM); } } else { send_to_char("They don't require any healing.\n\r",ch); return; } } if (!IS_NPC(victim) && ch != victim && IS_MORE(victim, MORE_GUARDIAN)) { guardian_message( victim ); act("$n just used Mother's Touch on you.",ch,NULL,victim,TO_VICT); } return; } void do_bodywrack( CHAR_DATA *ch, char *argument ) { CHAR_DATA *victim; char arg [MAX_INPUT_LENGTH]; int damage; argument = one_argument( argument, arg ); if (IS_NPC(ch)) return; if (!IS_WEREWOLF(ch)) { send_to_char( "Huh?\n\r", ch ); return; } if (get_tribe(ch,TRIBE_BLACK_FURIES) < 5) { send_to_char("You require the level 5 Black Furies power to use Body Wrack.\n\r",ch); return; } if (IS_ITEMAFF(ch, ITEMA_PEACE)) do_majesty(ch,""); if ( arg[0] == '\0' ) { send_to_char( "Who do you wish to use Body Wrack on?\n\r", ch ); return; } if ( ( victim = get_char_room( ch, arg ) ) == NULL ) { send_to_char( "They are not here.\n\r", ch ); return; } if ( is_safe(ch, victim) ) { if (!IS_NPC(victim) && ch != victim && IS_MORE(victim, MORE_GUARDIAN)) { guardian_message( victim ); act("$n just failed to use Body Wrack on you.",ch,NULL,victim,TO_VICT); } return; } damage = number_range(500,1000); act( "A look of concentration crosses $n's face.", ch, NULL, NULL, TO_ROOM ); send_to_char("You scream in agony as your body seems to be torn apart!\n\r",victim); act("$n doubles over and screams in agony!",victim,NULL,NULL,TO_ROOM); if ( !IS_NPC( victim ) ) { if ( IS_DEMON( victim ) && IS_DEMPOWER( victim, DEM_TOUGH ) ) return; if ( IS_WEREWOLF( victim ) && get_tribe( victim, TRIBE_GLASS_WALKERS ) > 4 ) return; if ( get_disc( victim, DISC_FORTITUDE ) > 4 ) return; } if (!IS_NPC(victim) && ch != victim && IS_MORE(victim, MORE_GUARDIAN)) { guardian_message( victim ); act("$n just used Body Wrack on you.",ch,NULL,victim,TO_VICT); } victim->hit -= damage; if ((IS_NPC(victim) && victim->hit < 1) || (!IS_NPC(victim) && victim->hit < -10)) { act("$n's body falls limply to the ground.",victim,NULL,NULL,TO_ROOM); group_gain(ch,victim); victim->form = 17; killperson(ch,victim); WAIT_STATE( ch, 12 ); return; } update_pos(victim); if (IS_NPC(victim)) multi_hit(victim,ch,TYPE_UNDEFINED); WAIT_STATE( ch, 12 ); return; } void do_wwpowers( CHAR_DATA *ch, char *argument ) { char buf[MAX_STRING_LENGTH]; int sn; bool any_powers = FALSE; bool any_commands = FALSE; if (IS_NPC(ch)) return; if (!IS_WEREWOLF(ch) ) { send_to_char("Huh?\n\r",ch); return; } for ( sn = 0; sn <= BREED_MAX; sn++ ) { if ( get_breed(ch,sn) > 0 ) any_powers = TRUE; } if (!any_commands) for ( sn = 0; sn <= AUSPICE_MAX; sn++ ) { if ( get_auspice(ch,sn) > 0 ) any_powers = TRUE; } if (!any_commands) for ( sn = 0; sn <= TRIBE_MAX; sn++ ) { if ( get_tribe(ch,sn) > 0 ) any_powers = TRUE; } send_to_char( "--------------------------------------------------------------------------------\n\r", ch ); send_to_char(" -= Gift Commands =-\n\r",ch); send_to_char( "--------------------------------------------------------------------------------\n\r", ch ); if (get_breed(ch, BREED_HOMID) > 0) { strcpy(buf,"Homid: Persuasion"); if (get_breed(ch, BREED_HOMID) > 1) strcat(buf," Staredown"); if (get_breed(ch, BREED_HOMID) > 2) strcat(buf," Reshape"); if (get_breed(ch, BREED_HOMID) > 3) strcat(buf," Disquiet"); if (get_breed(ch, BREED_HOMID) > 4) strcat(buf," Mask"); strcat(buf,".\n\r"); send_to_char(buf,ch); } if (get_breed(ch, BREED_LUPUS) > 0) { strcpy(buf,"Lupus: Heighten"); if (get_breed(ch, BREED_LUPUS) > 1) strcat(buf," Beckon"); if (get_breed(ch, BREED_LUPUS) > 2) strcat(buf," Master"); if (get_breed(ch, BREED_LUPUS) > 3) strcat(buf," Masssummons"); if (get_breed(ch, BREED_LUPUS) > 4) strcat(buf," Fleshbond"); strcat(buf,".\n\r"); send_to_char(buf,ch); } if (get_breed(ch, BREED_METIS) > 0) { strcpy(buf,"Metis: Nightsight"); if (get_breed(ch, BREED_METIS) > 1) strcat(buf," Burrow"); if (get_breed(ch, BREED_METIS) > 3) strcat(buf," Witherlimb"); if (get_breed(ch, BREED_METIS) > 4) strcat(buf," Porcupine"); strcat(buf,".\n\r"); send_to_char(buf,ch); } if (get_auspice(ch, AUSPICE_RAGABASH) > 0) { strcpy(buf,"Ragabash:"); if (get_auspice(ch, AUSPICE_RAGABASH) > 1) strcat(buf," Blur"); if (get_auspice(ch, AUSPICE_RAGABASH) > 2) strcat(buf," Silence"); if (get_auspice(ch, AUSPICE_RAGABASH) > 3) strcat(buf," Tail"); if (get_auspice(ch, AUSPICE_RAGABASH) > 4) strcat(buf," Moonbridge"); strcat(buf,".\n\r"); send_to_char(buf,ch); } if (get_auspice(ch, AUSPICE_THEURGE) > 0) { strcpy(buf,"Theurge: Mother"); if (get_auspice(ch, AUSPICE_THEURGE) > 1) strcat(buf," Scent"); if (get_auspice(ch, AUSPICE_THEURGE) > 2) strcat(buf," Control"); if (get_auspice(ch, AUSPICE_THEURGE) > 3) strcat(buf," Spiritguardian"); if (get_auspice(ch, AUSPICE_THEURGE) > 4) strcat(buf," Readaura"); strcat(buf,".\n\r"); send_to_char(buf,ch); } if (get_auspice(ch, AUSPICE_PHILODOX) > 0) { strcpy(buf,"Philodox:"); if (get_auspice(ch, AUSPICE_PHILODOX) > 2) strcat(buf," Scry"); if (get_auspice(ch, AUSPICE_PHILODOX) > 4) strcat(buf," Wallgranite"); strcat(buf,".\n\r"); send_to_char(buf,ch); } if (get_auspice(ch, AUSPICE_GALLIARD) > 0) { strcpy(buf,"Galliard: Wyld"); if (get_auspice(ch, AUSPICE_GALLIARD) > 2) strcat(buf," Beastwithin"); if (get_auspice(ch, AUSPICE_GALLIARD) > 3) strcat(buf," Klaive"); if (get_auspice(ch, AUSPICE_GALLIARD) > 4) strcat(buf," Hearttwister"); strcat(buf,".\n\r"); send_to_char(buf,ch); } if (get_auspice(ch, AUSPICE_AHROUN) > 0) { strcpy(buf,"Ahroun:"); if (get_auspice(ch, AUSPICE_AHROUN) > 2) strcat(buf," Truefear"); if (get_auspice(ch, AUSPICE_AHROUN) > 4) strcat(buf," Hand"); strcat(buf,".\n\r"); send_to_char(buf,ch); } if (get_tribe(ch, TRIBE_BLACK_FURIES) > 0) { strcpy(buf,"Black Furies: Aeolus"); if (get_tribe(ch, TRIBE_BLACK_FURIES) > 3) strcat(buf," Hagswrinkles"); if (get_tribe(ch, TRIBE_BLACK_FURIES) > 4) strcat(buf," Bodywrack"); strcat(buf,".\n\r"); send_to_char(buf,ch); } if (get_tribe(ch, TRIBE_BONE_GNAWERS) > 0) { strcpy(buf,"Bone Gnawers: Pigeon"); if (get_tribe(ch, TRIBE_BONE_GNAWERS) >= 1) strcat(buf, " Brew"); if (get_tribe(ch, TRIBE_BONE_GNAWERS) > 3) strcat(buf, " Minorcreate"); strcat(buf,".\n\r"); send_to_char(buf,ch); } if (get_tribe(ch, TRIBE_CHILDREN_OF_GAIA) > 0) { strcpy(buf,"Children of Gaia: Calm"); if (get_tribe(ch, TRIBE_CHILDREN_OF_GAIA) > 2) strcat(buf," Dazzle"); if (get_tribe(ch, TRIBE_CHILDREN_OF_GAIA) > 3) strcat(buf," Serenity"); if (get_tribe(ch, TRIBE_CHILDREN_OF_GAIA) > 4) strcat(buf," Halo"); strcat(buf,".\n\r"); send_to_char(buf,ch); } if (get_tribe(ch, TRIBE_FIANNA) > 0) { strcpy(buf,"Fianna:"); if (get_tribe(ch, TRIBE_FIANNA) > 2) strcat(buf," Formillusion"); if (get_tribe(ch, TRIBE_FIANNA) > 3) strcat(buf," Cloneobject"); if (get_tribe(ch, TRIBE_FIANNA) > 4) strcat(buf," Zulo"); strcat(buf,".\n\r"); send_to_char(buf,ch); } if (get_tribe(ch, TRIBE_GET_OF_FENRIS) > 0) { strcpy(buf,"Get of Fenris:"); if (get_tribe(ch, TRIBE_GET_OF_FENRIS) > 2) strcat(buf," Scream"); strcat(buf,".\n\r"); send_to_char(buf,ch); } if (get_tribe(ch, TRIBE_GLASS_WALKERS) > 0) { strcpy(buf,"Glass Walkers: Entrap"); if (get_tribe(ch,TRIBE_GLASS_WALKERS) > 4) strcat(buf," Circleattack"); strcat(buf,".\n\r"); send_to_char(buf,ch); } /* if (get_tribe(ch, TRIBE_RED_TALONS) > 0) { strcpy(buf,"Red Talons:"); strcat(buf,".\n\r"); send_to_char(buf,ch); } */ if (get_tribe(ch, TRIBE_SHADOW_LORDS) > 0) { strcpy(buf,"Shadow Lords:"); if (get_tribe(ch, TRIBE_SHADOW_LORDS) > 1) strcat(buf," Clap"); if (get_tribe(ch, TRIBE_SHADOW_LORDS) > 2) strcat(buf," Icy"); if (get_tribe(ch, TRIBE_SHADOW_LORDS) > 3) strcat(buf," Paralyze"); if (get_tribe(ch, TRIBE_SHADOW_LORDS) > 4) strcat(buf," Obedience"); strcat(buf,".\n\r"); send_to_char(buf,ch); } if (get_tribe(ch, TRIBE_SILENT_STRIDERS) > 0) { strcpy(buf,"Silent Striders:"); if (get_tribe(ch, TRIBE_SILENT_STRIDERS) > 4) strcat(buf, " Gate"); if (get_tribe(ch, TRIBE_SILENT_STRIDERS) <= 4) strcat(buf, " Hunt"); strcat(buf,".\n\r"); send_to_char(buf,ch); } if (get_tribe(ch, TRIBE_SILVER_FANGS) > 0) { strcpy(buf,"Silver Fangs:"); if (get_tribe(ch, TRIBE_SILVER_FANGS) > 3) strcat(buf," Shield"); strcat(buf,".\n\r"); send_to_char(buf,ch); } if (get_tribe(ch, TRIBE_STARGAZERS) > 0) { strcpy(buf,"Stargazers:"); if ( get_tribe(ch,TRIBE_STARGAZERS) > 4) strcat(buf," Grab"); strcat(buf,".\n\r"); send_to_char(buf,ch); } if (get_tribe(ch, TRIBE_UKTENA) > 0) { strcpy(buf,"Uktena: Shroud"); if (get_tribe(ch, TRIBE_UKTENA) > 3) strcat(buf," Invisibility"); if (get_tribe(ch, TRIBE_UKTENA) > 4) strcat(buf," Fetishdoll"); strcat(buf,".\n\r"); send_to_char(buf,ch); } if (get_tribe(ch, TRIBE_WENDIGOS) > 0) { strcpy(buf,"Wendigos: Camouflage"); if (get_tribe(ch, TRIBE_WENDIGOS) > 1) strcat( buf, " Earthquake"); if (get_tribe(ch, TRIBE_WENDIGOS) > 2) strcat( buf, " Chill"); if (get_tribe(ch, TRIBE_WENDIGOS) > 3) strcat( buf, " Engulf"); strcat(buf,".\n\r"); send_to_char(buf,ch); } if (!any_powers) send_to_char("You have no gifts.\n\r",ch); send_to_char( "--------------------------------------------------------------------------------\n\r", ch ); return; } void do_burrow( CHAR_DATA *ch, char *argument ) { if (IS_NPC(ch)) return; if (!IS_WEREWOLF(ch)) { send_to_char( "Huh?\n\r", ch ); return; } if (get_breed(ch,BREED_METIS) < 2) { send_to_char("You require the level 2 Metis power to Burrow into the ground.\n\r",ch); return; } if (IS_VAMPAFF(ch,VAM_EARTHMELDED) ) { REMOVE_BIT(ch->vampaff, VAM_EARTHMELDED); send_to_char("You burrow up out of the ground.\n\r",ch); act("$n burrows up out of the ground.", ch, NULL, NULL, TO_ROOM); return; } send_to_char("You burrow down into the ground.\n\r",ch); act("$n burrows down into the ground.", ch, NULL, NULL, TO_ROOM); SET_BIT(ch->vampaff, VAM_EARTHMELDED); REMOVE_BIT(ch->affected_by, AFF_FLAMING); REMOVE_BIT(ch->more, MORE_FLAMES); return; } void do_wyld( CHAR_DATA *ch, char *argument ) { DESCRIPTOR_DATA *d; CHAR_DATA *vch; CHAR_DATA *victim; char buf [MAX_STRING_LENGTH]; if (IS_NPC(ch)) return; if (!IS_WEREWOLF(ch) && ch->in_room == NULL) { send_to_char("Huh?\n\r",ch); return; } if (get_auspice(ch,AUSPICE_GALLIARD) < 1) { send_to_char("You require the level 1 Galliard power to use the Call of the Wyld.\n\r",ch); return; } if ( ( victim = ch->fighting ) == NULL && ch->hit > 0 ) { send_to_char("You can only call for assistance in times of great need.\n\r",ch); return; } if (ch->pcdata->reina > 0) { send_to_char("Your voice has not yet recovered.\n\r",ch); return; } ch->pcdata->reina = 5; for ( d = descriptor_list; d != NULL; d = d->next ) { if ( d->connected != CON_PLAYING ) continue; if ( (vch = d->character) == NULL ) continue; if ( vch->in_room == NULL) continue; if ( IS_NPC(vch) ) continue; if ( ch->beast >= 40 && vch->beast < 40 ) continue; if ( ch->beast < 40 && vch->beast >= 40 ) continue; if ( vch == ch ) act("You call for assistance!", ch, NULL, argument, TO_CHAR); if (ch != vch && (IS_WEREWOLF(vch) || IS_IMMORTAL(vch))) { if (victim != NULL) { sprintf(buf,"CALL OF THE WYLD:[$n is under attack by %s at %s]", IS_NPC(victim) ? victim->short_descr : victim->name, ch->in_room->name); act(buf,ch,NULL,vch, TO_VICT); } else if (ch->hit < 1) { sprintf(buf,"CALL OF THE WYLD:[$n is badly wounded at %s]", ch->in_room->name); act(buf,ch,NULL,vch, TO_VICT); } else { sprintf(buf,"CALL OF THE WYLD:[$n needs assistance at %s]", ch->in_room->name); act(buf,ch,NULL,vch, TO_VICT); } } } return; } void do_dazzle( CHAR_DATA *ch, char *argument ) { CHAR_DATA *victim; char arg [MAX_INPUT_LENGTH]; argument = one_argument( argument, arg ); if (IS_NPC(ch)) return; if (!IS_WEREWOLF(ch) && ch->in_room == NULL) { send_to_char("Huh?\n\r",ch); return; } if (get_tribe(ch,TRIBE_CHILDREN_OF_GAIA) < 3) { send_to_char("You require the level 3 Children of Gaia power to use Dazzle.\n\r",ch); return; } if (IS_ITEMAFF(ch, ITEMA_PEACE)) do_majesty(ch,""); if ( arg[0] == '\0' ) { send_to_char( "Who do you want to Dazzle?\n\r", ch ); return; } if ( ( victim = get_char_room( ch, arg ) ) == NULL ) { send_to_char( "They are not here.\n\r", ch ); return; } if (victim->position != POS_FIGHTING && victim->hit < victim->max_hit) { send_to_char( "Nothing happens.\n\r", ch ); if (!IS_NPC(victim) && ch != victim && IS_MORE(victim, MORE_GUARDIAN)) { guardian_message( victim ); act("$n just failed to use Dazzle on you.",ch,NULL,victim,TO_VICT); } return; } if (IS_IMMUNE(victim,IMM_SHIELDED) ) { send_to_char( "Nothing happens.\n\r", ch ); if (!IS_NPC(victim) && ch != victim && IS_MORE(victim, MORE_GUARDIAN)) { guardian_message( victim ); act("$n just failed to use Dazzle on you.",ch,NULL,victim,TO_VICT); } return; } if (is_safe(ch,victim)) { if (!IS_NPC(victim) && ch != victim && IS_MORE(victim, MORE_GUARDIAN)) { guardian_message( victim ); act("$n just failed to use Dazzle on you.",ch,NULL,victim,TO_VICT); } return; } act( "A look of concentration crosses $n's face.", ch, NULL, NULL, TO_ROOM ); send_to_char("You cover your eyes as you are dazzled!\n\r",victim); act("$n covers $s eyes, looking dazzled!",victim,NULL,NULL,TO_ROOM); if (!IS_NPC(victim) && ch != victim && IS_MORE(victim, MORE_GUARDIAN)) { guardian_message( victim ); act("$n just used Dazzle on you.",ch,NULL,victim,TO_VICT); } stop_fighting(victim,TRUE); update_pos(victim); if (victim->position > POS_STUNNED) victim->position = POS_STUNNED; if (IS_NPC(victim)) do_kill(victim,ch->name); WAIT_STATE( ch, 24 ); return; } void do_tail( CHAR_DATA *ch, char *argument ) { char arg [MAX_INPUT_LENGTH]; CHAR_DATA *victim; int dam; one_argument( argument, arg ); if (IS_NPC(ch)) return; if (!IS_WEREWOLF(ch)) { send_to_char( "Huh?\n\r", ch ); return; } if (get_auspice(ch, AUSPICE_RAGABASH) < 4) { send_to_char("You require the level 4 Ragabash power to use Tail of the Monkey.\n\r",ch); return; } if (arg[0] == '\0' && ch->fighting == NULL) { send_to_char("Who do you wish to use Tail of the Monkey on?\n\r",ch); return; } if ( ( victim = ch->fighting ) == NULL ) { if ( ( victim = get_char_room( ch, arg ) ) == NULL ) { send_to_char( "They aren't here.\n\r", ch ); return; } } if (IS_ITEMAFF(ch, ITEMA_PEACE)) do_majesty(ch,""); if (is_safe(ch,victim)) { if (!IS_NPC(victim) && ch != victim && IS_MORE(victim, MORE_GUARDIAN)) { guardian_message( victim ); act("$n just failed to use Tail of the Monkey on you.",ch,NULL,victim,TO_VICT); } return; } WAIT_STATE( ch, 12 ); dam = number_range(10,20); dam += char_damroll(ch); if (dam == 0) dam = 1; if ( !IS_AWAKE(victim) ) dam *= 2; if ( !IS_NPC(ch) && get_disc(ch,DISC_POTENCE) > 0) dam += dam * get_disc(ch,DISC_POTENCE) * 0.5; else if ( !IS_NPC(ch) && (IS_SET(ch->act, PLR_CHAMPION) || IS_SET(ch->act, PLR_DEMON)) && IS_SET(ch->pcdata->disc[C_POWERS], DEM_MIGHT) ) dam *= 1.5; dam = dam + (dam * ((ch->wpn[0]) * 0.01)); if ( dam <= 0 ) dam = 1; damage( ch, victim, dam, gsn_tail + TYPE_ADD_AGG ); return; } void do_rain( CHAR_DATA *ch, char *argument ) { DESCRIPTOR_DATA *d; CHAR_DATA *victim; char buf[MAX_INPUT_LENGTH]; if (IS_NPC(ch)) return; if (!IS_WEREWOLF(ch)) { send_to_char("Huh?\n\r",ch); return; } if (get_tribe(ch, TRIBE_CHILDREN_OF_GAIA) < 2) { send_to_char("You require the level 2 power of the Children of Gaia to call upon Gaia's Tears.\n\r",ch); return; } if (ch->in_room == NULL) { send_to_char("Nothing happens.\n\r",ch); return; } if (ch->pcdata->wpoints > 0) { if (ch->pcdata->wpoints > 1) sprintf(buf,"You cannot call your weather controlling powers for another %d seconds.\n\r",ch->pcdata->wpoints); else sprintf(buf,"You cannot call your weather controlling powers for another 1 second.\n\r"); send_to_char(buf,ch); return; } if ( ch->in_room->sector_type == SECT_INSIDE || !IS_OUTSIDE(ch) ) { send_to_char("You can only control the weather outside.\n\r",ch); return; } act( "A look of concentration crosses $n's face.", ch, NULL, NULL, TO_ROOM ); if (IS_SET(world_affects, WORLD_RAIN)) { send_to_char("You banish the rain.\n\r",ch); REMOVE_BIT(world_affects, WORLD_RAIN); weather_info.sky = SKY_CLOUDY; ch->pcdata->wpoints = 60; for ( d = descriptor_list; d != NULL; d = d->next ) { if ( d->connected != CON_PLAYING ) continue; if ( (victim = d->character) == NULL ) continue; if ( IS_NPC(victim) ) continue; if ( victim->in_room == NULL ) continue; if ( ch == victim ) continue; if ( victim->in_room->sector_type == SECT_INSIDE ) continue; if ( ch->in_room == victim->in_room ) act("$n holds up his arms and the rain stops.", ch, NULL, victim, TO_VICT); else send_to_char("It stops raining.\n\r", victim); } } else { send_to_char("You summon a heavy shower of rain.\n\r",ch); SET_BIT(world_affects, WORLD_RAIN); ch->pcdata->wpoints = 60; weather_info.sky = SKY_RAINING; for ( d = descriptor_list; d != NULL; d = d->next ) { if ( d->connected != CON_PLAYING ) continue; if ( (victim = d->character) == NULL ) continue; if ( IS_NPC(victim) ) continue; if ( victim->in_room == NULL ) continue; if ( ch == victim ) continue; if ( victim->in_room->sector_type == SECT_INSIDE ) continue; if ( ch->in_room == victim->in_room ) act("$n holds up his arms and calls forth a heavy shower of rain.", ch, NULL, victim, TO_VICT); else send_to_char("It starts to rain heavily.\n\r", victim); } } return; } void do_eclipse( CHAR_DATA *ch, char *argument ) { DESCRIPTOR_DATA *d; CHAR_DATA *victim; char buf[MAX_INPUT_LENGTH]; if (IS_NPC(ch)) return; if (!IS_WEREWOLF(ch)) { send_to_char("Huh?\n\r",ch); return; } if (get_tribe(ch, TRIBE_CHILDREN_OF_GAIA) < 4) { send_to_char("You require the level 4 power of the Children of Gaia to call an Eclipse\n\r",ch); return; } if (ch->in_room == NULL) { send_to_char("Nothing happens.\n\r",ch); return; } if (ch->pcdata->wpoints > 0) { if (ch->pcdata->wpoints > 1) sprintf(buf,"You cannot call your weather controlling powers for another %d seconds.\n\r",ch->pcdata->wpoints); else sprintf(buf,"You cannot call your weather controlling powers for another 1 second.\n\r"); send_to_char(buf,ch); return; } if ( ch->in_room->sector_type == SECT_INSIDE || !IS_OUTSIDE(ch) ) { send_to_char("You can only control the weather outside.\n\r",ch); return; } if (weather_info.sunlight != SUN_LIGHT) { send_to_char("You can only create an eclipse when the sun is high in the sky.\n\r",ch); return; } act( "A look of concentration crosses $n's face.", ch, NULL, NULL, TO_ROOM ); if (IS_SET(world_affects, WORLD_ECLIPSE)) { send_to_char("You end the eclipse.\n\r",ch); REMOVE_BIT(world_affects, WORLD_ECLIPSE); ch->pcdata->wpoints = 120; for ( d = descriptor_list; d != NULL; d = d->next ) { if ( d->connected != CON_PLAYING ) continue; if ( (victim = d->character) == NULL ) continue; if ( IS_NPC(victim) ) continue; if ( victim->in_room == NULL ) continue; if ( ch == victim ) continue; if ( victim->in_room->sector_type == SECT_INSIDE ) continue; if ( ch->in_room == victim->in_room ) act("$n holds up his arms and the sun emerges from behind the moon.", ch, NULL, victim, TO_VICT); else send_to_char("The sun emerges from behind the moon.\n\r", victim); } } else { send_to_char("You create an eclipse.\n\r",ch); SET_BIT(world_affects, WORLD_ECLIPSE); ch->pcdata->wpoints = 120; for ( d = descriptor_list; d != NULL; d = d->next ) { if ( d->connected != CON_PLAYING ) continue; if ( (victim = d->character) == NULL ) continue; if ( IS_NPC(victim) ) continue; if ( victim->in_room == NULL ) continue; if ( ch == victim ) continue; if ( victim->in_room->sector_type == SECT_INSIDE ) continue; if ( ch->in_room == victim->in_room ) act("$n holds up his arms and calls forth an eclipse of the sun.", ch, NULL, victim, TO_VICT); else send_to_char("The sun is eclipsed by the moon.\n\r", victim); } } return; } void do_lightning( CHAR_DATA *ch, char *argument ) { CHAR_DATA *victim; DESCRIPTOR_DATA *d; int dam, hp, sn; char arg[MAX_INPUT_LENGTH]; char buf[MAX_INPUT_LENGTH]; one_argument( argument, arg ); if (IS_NPC(ch)) return; if (!IS_WEREWOLF(ch)) { send_to_char("Huh?\n\r",ch); return; } if (get_tribe(ch, TRIBE_CHILDREN_OF_GAIA) < 3) { send_to_char("You require the level 3 power of the Children of Gaia to call the Lightning\n\r",ch); return; } if (ch->pcdata->wpoints > 0) { if (ch->pcdata->wpoints > 1) sprintf(buf,"You cannot call your weather controlling powers for another %d seconds.\n\r",ch->pcdata->wpoints); else sprintf(buf,"You cannot call your weather controlling powers for another 1 second.\n\r"); send_to_char(buf,ch); return; } if ( ch->in_room->sector_type == SECT_INSIDE || !IS_OUTSIDE(ch) ) { send_to_char("You can only control the weather outside.\n\r",ch); return; } if (weather_info.sky != SKY_LIGHTNING && weather_info.sky != SKY_RAINING && !IS_SET(world_affects, WORLD_RAIN) ) { send_to_char("The weather is not bad enough to call for a lightning strike.\n\r",ch); return; } if (IS_ITEMAFF(ch, ITEMA_PEACE)) do_majesty(ch,""); if (arg[0] == '\0' && ch->fighting == NULL) { send_to_char( "Who do you wish to strike with lightning?\n\r", ch ); return; } if ( ( victim = ch->fighting ) == NULL ) { if ( ( victim = get_char_room( ch, arg ) ) == NULL ) { send_to_char( "They aren't here.\n\r", ch ); return; } } if ( ch == victim ) { send_to_char( "Now that would be just plain stupid.\n\r", ch ); return; } if ( ( sn = skill_lookup( "lightning breath" ) ) < 0 ) { send_to_char( "Bug - please inform Morglum.\n\r", ch ); return; } act( "A look of concentration crosses $n's face.", ch, NULL, NULL, TO_ROOM ); ch->pcdata->wpoints = 60; for ( d = descriptor_list; d != NULL; d = d->next ) { if ( d->connected != CON_PLAYING ) continue; if ( (victim = d->character) == NULL ) continue; if ( IS_NPC(victim) ) continue; if ( victim->in_room == NULL ) continue; if ( victim->in_room->sector_type == SECT_INSIDE ) continue; send_to_char( "Lightning flashes in the sky.\n\r", ch ); } send_to_char( "A stream of lightning arcs down from the sky.\n\r", ch ); act("A stream of lightning arcs down from the sky.", ch, NULL, NULL, TO_ROOM); dam = number_range(500,1000); hp = victim->hit; damage( ch, victim, dam, sn ); WAIT_STATE(ch,6); if (victim == NULL || victim->position == POS_DEAD) return; if (!IS_NPC(victim) && IS_IMMUNE(victim, IMM_LIGHTNING) ) victim->hit = hp; update_pos(victim); return; } void do_wall( CHAR_DATA *ch, char *argument ) { OBJ_DATA *obj; EXIT_DATA *pexit; ROOM_INDEX_DATA *location; ROOM_INDEX_DATA *to_room; char arg [MAX_INPUT_LENGTH]; char buf [MAX_INPUT_LENGTH]; int duration = number_range(15,30); int direction, rev; one_argument( argument, arg ); if (IS_NPC(ch)) return; if (!IS_WEREWOLF(ch)) { send_to_char("Huh?\n\r",ch); return; } if (get_tribe(ch, TRIBE_CHILDREN_OF_GAIA) < 2) { send_to_char("You require the level 2 power of the Children of Gaia to create a Wall of Water.\n\r",ch); return; } if ( arg[0] == '\0') { send_to_char( "Which direction do you wish to make the wall?\n\r", ch ); return; } if (!str_cmp(arg,"north") || !str_cmp(arg,"n")) {direction = DIR_NORTH; rev = DIR_SOUTH;} else if (!str_cmp(arg,"south") || !str_cmp(arg,"s")) {direction = DIR_SOUTH; rev = DIR_NORTH;} else if (!str_cmp(arg,"east") || !str_cmp(arg,"e")) {direction = DIR_EAST; rev = DIR_WEST;} else if (!str_cmp(arg,"west") || !str_cmp(arg,"w")) {direction = DIR_WEST; rev = DIR_EAST;} else if (!str_cmp(arg,"up") || !str_cmp(arg,"u")) {direction = DIR_UP; rev = DIR_DOWN;} else if (!str_cmp(arg,"down") || !str_cmp(arg,"d")) {direction = DIR_DOWN; rev = DIR_UP;} else { send_to_char( "Select direction: North, South, East, West, Up or Down.\n\r", ch ); return; } switch (direction) { default: strcpy(arg,"north"); break; case DIR_NORTH: strcpy(arg,"north"); break; case DIR_SOUTH: strcpy(arg,"south"); break; case DIR_EAST: strcpy(arg,"east"); break; case DIR_WEST: strcpy(arg,"west"); break; case DIR_UP: strcpy(arg,"up"); break; case DIR_DOWN: strcpy(arg,"down"); break; } if ( ( pexit = ch->in_room->exit[direction] ) == NULL ) { send_to_char("Nothing happens.\n\r",ch); return; } if ( ( location = ch->in_room ) == NULL ) { send_to_char("Nothing happens.\n\r",ch); return; } if ( ( to_room = pexit->to_room ) == NULL ) { send_to_char("Nothing happens.\n\r",ch); return; } if (IS_SET(pexit->exit_info, EX_WALL_WATER) || IS_SET(pexit->exit_info, EX_WALL_GRANITE) || IS_SET(pexit->exit_info, EX_WALL_FLAME)) { send_to_char("There is already a wall blocking that exit.\n\r",ch); return; } act( "A look of concentration crosses $n's face.", ch, NULL, NULL, TO_ROOM ); obj = create_object( get_obj_index( OBJ_VNUM_PORTAL ), 0 ); obj->item_type = ITEM_WALL; obj->value[0] = direction; obj->timer = duration; free_string(obj->name); obj->name = str_dup("wall flowing water"); free_string(obj->short_descr); obj->short_descr = str_dup("a wall of flowing water"); sprintf(buf,"A wall of flowing water blocks your exit %s.",arg); free_string(obj->description); obj->description = str_dup(buf); obj_to_room( obj, ch->in_room ); SET_BIT(pexit->exit_info, EX_WALL_WATER); if (direction == DIR_UP) sprintf(buf,"Water pours from the ground and forms a wall above you."); else if (direction == DIR_DOWN) sprintf(buf,"Water pours from the ground and forms a wall below you."); else sprintf(buf,"Water pours from the ground and forms a wall to the %s.",arg); act( buf, ch, NULL, NULL, TO_CHAR ); act( buf, ch, NULL, NULL, TO_ROOM ); WAIT_STATE(ch,12); if (location == to_room) return; char_from_room(ch); char_to_room(ch, to_room); if ( ( pexit = ch->in_room->exit[rev] ) == NULL ) return; if (IS_SET(pexit->exit_info, EX_WALL_WATER) || IS_SET(pexit->exit_info, EX_WALL_GRANITE) || IS_SET(pexit->exit_info, EX_WALL_FLAME)) return; switch (rev) { default: strcpy(arg,"north"); break; case DIR_NORTH: strcpy(arg,"north"); break; case DIR_SOUTH: strcpy(arg,"south"); break; case DIR_EAST: strcpy(arg,"east"); break; case DIR_WEST: strcpy(arg,"west"); break; case DIR_UP: strcpy(arg,"up"); break; case DIR_DOWN: strcpy(arg,"down"); break; } obj = create_object( get_obj_index( OBJ_VNUM_PORTAL ), 0 ); obj->item_type = ITEM_WALL; obj->value[0] = rev; obj->timer = duration; free_string(obj->name); obj->name = str_dup("wall flowing water"); free_string(obj->short_descr); obj->short_descr = str_dup("a wall of flowing water"); sprintf(buf,"A wall of flowing water blocks your exit %s.",arg); free_string(obj->description); obj->description = str_dup(buf); obj_to_room( obj, ch->in_room ); SET_BIT(pexit->exit_info, EX_WALL_WATER); if (rev == DIR_UP) sprintf(buf,"Water pours from the ground and forms a wall above you."); else if (rev == DIR_DOWN) sprintf(buf,"Water pours from the ground and forms a wall below you."); else sprintf(buf,"Water pours from the ground and forms a wall to the %s.",arg); act( buf, ch, NULL, NULL, TO_ROOM ); char_from_room(ch); char_to_room(ch, location); return; } void do_animal( CHAR_DATA *ch, char *argument ) { if (IS_NPC(ch)) return; if (!IS_WEREWOLF(ch)) { send_to_char("Huh?\n\r",ch); return; } if (get_breed(ch, BREED_LUPUS) < 3) { send_to_char("You require the level 3 Lupus power to Master the animals.\n\r",ch); return; } if (IS_MORE(ch,MORE_ANIMAL_MASTER) ) { send_to_char("You are no longer so attractive to animals.\n\r",ch); REMOVE_BIT(ch->more, MORE_ANIMAL_MASTER); return; } send_to_char("You make yourself attractive to animals.\n\r",ch); SET_BIT(ch->more, MORE_ANIMAL_MASTER); return; } void do_fleshbond( CHAR_DATA *ch, char *argument ) { CHAR_DATA *victim; OBJ_DATA *obj; OBJ_DATA *obj_next; char arg[MAX_INPUT_LENGTH]; int mob_vnum; one_argument( argument, arg ); if (IS_NPC(ch)) return; if (!IS_WEREWOLF(ch)) { send_to_char("Huh?\n\r",ch); return; } if (get_breed(ch, BREED_LUPUS) < 5) { send_to_char("You require the level 5 Lupus power to Flesh Bond an animal to yourself.\n\r",ch); return; } mob_vnum = ch->pcdata->absorb[ABS_MOB_VNUM]; if (mob_vnum > 0) { if ( ( victim = create_mobile( get_mob_index( mob_vnum ) ) ) == NULL ) { send_to_char("Bug - Please Inform Morglum.\n\r",ch); return; } if ( ( ( ch->hit - ch->pcdata->absorb[ABS_MOB_HP] ) < 1 ) || ( ( ch->max_hit - ch->pcdata->absorb[ABS_MOB_MAX_HP]) < 1 ) ) { send_to_char("You would be unable to survive the removal of the Flesh Bonded creature.\n\r",ch); return; } ch->hit -= ch->pcdata->absorb[ABS_MOB_HP]; ch->max_hit -= ch->pcdata->absorb[ABS_MOB_MAX_HP]; victim->hit = ch->pcdata->absorb[ABS_MOB_HP]; victim->max_hit = ch->pcdata->absorb[ABS_MOB_MAX_HP]; ch->pcdata->absorb[ABS_MOB_VNUM] = 0; ch->pcdata->absorb[ABS_MOB_HP] = 0; ch->pcdata->absorb[ABS_MOB_MAX_HP] = 0; char_to_room(victim,ch->in_room); act("You pull $N out of your body.",ch,NULL,victim,TO_CHAR); act("$n pulls $N out of $s body.",ch,NULL,victim,TO_ROOM); return; } if ( arg[0] == '\0' ) { send_to_char( "What animal do you wish to Flesh Bond?\n\r", ch ); return; } if ( ( victim = get_char_room( ch, arg ) ) == NULL ) { send_to_char( "They aren't here.\n\r", ch ); return; } if ( ch == victim ) { send_to_char( "I think not...\n\r", ch ); return; } if ( !IS_NPC(victim) ) { send_to_char( "Not on players.\n\r", ch ); return; } switch ( victim->pIndexData->vnum ) { default: send_to_char( "You are unable to Flesh Bond with them.\n\r", ch ); return; case 3062: case 3066: case 5333: case 30006: case 30007: case 30008: case 30009: case 30010: case 30013: case 30014: break; } act("You absorb $N into your body.",ch,NULL,victim,TO_CHAR); act("$n absorbs $N into $s body.",ch,NULL,victim,TO_NOTVICT); act("$n absorbs you into $s body.",ch,NULL,victim,TO_VICT); for ( obj = victim->carrying; obj != NULL; obj = obj_next ) { obj_next = obj->next_content; obj_from_char(obj); obj_to_room(obj,victim->in_room); act("$p falls to the ground.",victim,obj,NULL,TO_ROOM); } while ( victim->affected ) affect_remove( victim, victim->affected ); ch->pcdata->absorb[ABS_MOB_VNUM] = victim->pIndexData->vnum; ch->pcdata->absorb[ABS_MOB_HP] = victim->hit; ch->pcdata->absorb[ABS_MOB_MAX_HP] = victim->max_hit; ch->hit += victim->hit; ch->max_hit += victim->max_hit; extract_char(victim, TRUE); return; } void do_masssummons( CHAR_DATA *ch, char *argument ) { CHAR_DATA *victim; CHAR_DATA *mount; int count = 0; if (IS_NPC(ch)) return; if (!IS_WEREWOLF(ch)) { send_to_char("Huh?\n\r",ch); return; } if (get_breed(ch, BREED_LUPUS) < 4) { send_to_char("You require the level 4 Lupus power to use Mass Summons.\n\r",ch); return; } if ( ch->in_room == NULL ) { send_to_char( "Bug - Please inform Morglum.\n\r", ch ); return; } act( "A look of concentration crosses $n's face.", ch, NULL, NULL, TO_ROOM ); for ( victim = char_list; victim != NULL; victim = victim->next ) { if (count >= 5) return; if ( !IS_NPC(victim) || victim->in_room == NULL || victim->in_room == ch->in_room) continue; switch ( victim->pIndexData->vnum ) { default: continue; case 30006: case 30007: case 30008: case 30009: case 30010: case 30013: case 30014: break; } count++; act( "$n disappears suddenly.", victim, NULL, NULL, TO_ROOM ); char_from_room( victim ); char_to_room( victim, ch->in_room ); do_look( victim, "auto" ); WAIT_STATE( ch, 12 ); if ( (mount = victim->mount) != NULL ) { act( "$n arrives suddenly on $N.", mount, NULL, victim, TO_NOTVICT ); act( "$N has summoned you!", mount, NULL, ch, TO_CHAR ); } else act( "$n arrives suddenly.", victim, NULL, NULL, TO_ROOM ); } if (count < 1) send_to_char("Nothing happens.\n\r",ch); return; } void do_gifts( CHAR_DATA *ch, char *argument ) { char arg [MAX_INPUT_LENGTH]; char buf [MAX_INPUT_LENGTH]; char disc [25]; int improve, imp_cost; int sn, col; int gt = 0; int gift = 0; int ww_max = (ch->class != CLASS_WEREWOLF) ? 3 : 5; bool got_disc = FALSE; one_argument( argument, arg ); if (IS_NPC(ch)) return; if (!IS_WEREWOLF(ch) ) { send_to_char("Huh?\n\r",ch); return; } if ( arg[0] == '\0' ) { send_to_char( "--------------------------------------------------------------------------------\n\r", ch ); send_to_char(" -= Gifts =-\n\r",ch); send_to_char( "--------------------------------------------------------------------------------\n\r", ch ); col = 0; for ( sn = BREED_HOMID; sn <= BREED_METIS; sn++ ) { if ( ch->pcdata->breed[sn] == 0 ) continue; got_disc = TRUE; switch (sn) { default: strcpy(disc,"None"); break; case BREED_HOMID: strcpy(disc,"Homid"); break; case BREED_LUPUS: strcpy(disc,"Lupus"); break; case BREED_METIS: strcpy(disc,"Metis"); break; } if (ch->pcdata->cland[0] == sn) strcpy(disc,upper_cap(disc)); if (ch->pcdata->breed[sn] != 0 ) { sprintf( buf, "%-16s: %-2d ", disc, get_breed(ch,sn) ); if (ch->pcdata->cland[0] == sn) ADD_COLOUR(ch, buf, WHITE); send_to_char( buf, ch ); if ( ++col % 3 == 0 ) send_to_char( "\n\r", ch ); } } for ( sn = AUSPICE_RAGABASH; sn <= AUSPICE_AHROUN; sn++ ) { if ( ch->pcdata->auspice[sn] == 0 ) continue; got_disc = TRUE; switch (sn) { default: strcpy(disc,"None"); break; case AUSPICE_RAGABASH: strcpy(disc,"Ragabash"); break; case AUSPICE_THEURGE: strcpy(disc,"Theurge"); break; case AUSPICE_PHILODOX: strcpy(disc,"Philodox"); break; case AUSPICE_GALLIARD: strcpy(disc,"Galliard"); break; case AUSPICE_AHROUN: strcpy(disc,"Ahroun"); break; } if (ch->pcdata->cland[1] == sn) strcpy(disc,upper_cap(disc)); if (ch->pcdata->auspice[sn] != 0 ) { sprintf( buf, "%-16s: %-2d ", disc, get_auspice(ch,sn) ); if (ch->pcdata->cland[1] == sn) ADD_COLOUR(ch, buf, WHITE); send_to_char( buf, ch ); if ( ++col % 3 == 0 ) send_to_char( "\n\r", ch ); } } for ( sn = TRIBE_BLACK_FURIES; sn <= TRIBE_WENDIGOS; sn++ ) { if ( ch->pcdata->tribes[sn] == 0 ) continue; got_disc = TRUE; switch (sn) { default: strcpy(disc,"None"); break; case TRIBE_BLACK_FURIES: strcpy(disc,"Black Furies"); break; case TRIBE_BONE_GNAWERS: strcpy(disc,"Bone Gnawers"); break; case TRIBE_CHILDREN_OF_GAIA: strcpy(disc,"Children of Gaia"); break; case TRIBE_FIANNA: strcpy(disc,"Fianna"); break; case TRIBE_GET_OF_FENRIS: strcpy(disc,"Get of Fenris"); break; case TRIBE_GLASS_WALKERS: strcpy(disc,"Glass Walkers"); break; case TRIBE_RED_TALONS: strcpy(disc,"Red Talons"); break; case TRIBE_SHADOW_LORDS: strcpy(disc,"Shadow Lords"); break; case TRIBE_SILENT_STRIDERS: strcpy(disc,"Silent Striders"); break; case TRIBE_SILVER_FANGS: strcpy(disc,"Silver Fangs"); break; case TRIBE_STARGAZERS: strcpy(disc,"Stargazers"); break; case TRIBE_UKTENA: strcpy(disc,"Uktena"); break; case TRIBE_WENDIGOS: strcpy(disc,"Wendigos"); break; } if (ch->pcdata->cland[2] == sn) strcpy(disc,upper_cap(disc)); if (ch->pcdata->tribes[sn] != 0) { sprintf( buf, "%-16s: %-2d ", disc, get_tribe(ch,sn) ); if (ch->pcdata->cland[2] == sn) ADD_COLOUR(ch, buf, WHITE); send_to_char( buf, ch ); if ( ++col % 3 == 0 ) send_to_char( "\n\r", ch ); } } if ( col % 3 != 0 ) send_to_char( "\n\r", ch ); if (!got_disc) send_to_char("You currently have no gifts.\n\r",ch); send_to_char( "--------------------------------------------------------------------------------\n\r", ch ); send_to_char("To improve a gift rating, type: gifts <name>\n\r",ch); send_to_char( "--------------------------------------------------------------------------------\n\r", ch ); return; } if (!str_cmp(argument,"homid")) {improve = BREED_HOMID; gt = 0;} else if (!str_cmp(argument,"lupus")) {improve = BREED_LUPUS; gt = 0;} else if (!str_cmp(argument,"metis")) {improve = BREED_METIS; gt = 0;} else if (!str_cmp(argument,"ragabash")) {improve = AUSPICE_RAGABASH; gt = 1;} else if (!str_cmp(argument,"theurge")) {improve = AUSPICE_THEURGE; gt = 1;} else if (!str_cmp(argument,"philodox")) {improve = AUSPICE_PHILODOX; gt = 1;} else if (!str_cmp(argument,"galliard")) {improve = AUSPICE_GALLIARD; gt = 1;} else if (!str_cmp(argument,"ahroun")) {improve = AUSPICE_AHROUN; gt = 1;} else if (!str_cmp(argument,"black furies")) {improve = TRIBE_BLACK_FURIES; gt = 2;} else if (!str_cmp(argument,"bone gnawers")) {improve = TRIBE_BONE_GNAWERS; gt = 2;} else if (!str_cmp(argument,"children of gaia")) {improve = TRIBE_CHILDREN_OF_GAIA; gt = 2;} else if (!str_cmp(argument,"fianna")) {improve = TRIBE_FIANNA; gt = 2;} else if (!str_cmp(argument,"get of fenris")) {improve = TRIBE_GET_OF_FENRIS; gt = 2;} else if (!str_cmp(argument,"glass walkers")) {improve = TRIBE_GLASS_WALKERS; gt = 2;} else if (!str_cmp(argument,"red talons")) {improve = TRIBE_RED_TALONS; gt = 2;} else if (!str_cmp(argument,"shadow lords")) {improve = TRIBE_SHADOW_LORDS; gt = 2;} else if (!str_cmp(argument,"silent striders")) {improve = TRIBE_SILENT_STRIDERS; gt = 2;} else if (!str_cmp(argument,"silver fangs")) {improve = TRIBE_SILVER_FANGS; gt = 2;} else if (!str_cmp(argument,"stargazers")) {improve = TRIBE_STARGAZERS; gt = 2;} else if (!str_cmp(argument,"uktena")) {improve = TRIBE_UKTENA; gt = 2;} else if (!str_cmp(argument,"wendigos")) {improve = TRIBE_WENDIGOS; gt = 2;} else { send_to_char("You know of no such gift.\n\r",ch); return; } switch (gt) { default: break; case 0: gift = ch->pcdata->breed[improve]; break; case 1: gift = ch->pcdata->auspice[improve]; break; case 2: gift = ch->pcdata->tribes[improve]; break; } if ( ch->pcdata->cland[gt] == improve ) ww_max = 5; if (gift == 0) { send_to_char("You know of no such gift.\n\r",ch); return; } if (gift >= ww_max) { send_to_char("You are unable to improve your ability in that gift any further.\n\r",ch); return; } if (gift < 1) gift = 1; if (ch->class != CLASS_WEREWOLF) { if ((gt == 0 || gt == 1) && ch->pcdata->cland[gt] == improve) imp_cost = gift * 10; else imp_cost = gift * 15; } else if (ch->pcdata->cland[2] == -1 && gt == 2) imp_cost = gift * 9; else if (ch->pcdata->cland[gt] == improve) imp_cost = gift * 5; else imp_cost = gift * 10; if (ch->practice < imp_cost) { sprintf(buf,"You need another %d primal to increase that gift.\n\r", imp_cost - ch->practice ); send_to_char(buf,ch); return; } if (gift < 1) gift = 1; else gift++; switch (gt) { default : break; case 0: ch->pcdata->breed[improve] = gift; break; case 1: ch->pcdata->auspice[improve] = gift; break; case 2: ch->pcdata->tribes[improve] = gift; break; } ch->practice -= imp_cost; send_to_char("You improve your gift.\n\r",ch); return; } void do_tribegifts( CHAR_DATA *ch, char *argument ) { char arg [MAX_INPUT_LENGTH]; char buf [MAX_INPUT_LENGTH]; int improve, sn, col, gtype; strcpy( arg, argument ); if ( IS_NPC(ch) ) return; if ( !IS_WEREWOLF(ch) ) { send_to_char( "Huh?\n\r", ch ); return; } if ( arg[0] == '\0' ) { send_to_char("--------------------------------------------------------------------------------\n\r",ch); send_to_char(" -= Gifts =-\n\r",ch); send_to_char("--------------------------------------------------------------------------------\n\r",ch); /* Breed gift */ improve = ch->pcdata->cland[0]; sprintf( buf, "Breed Gift: %s.\n\r", gift_breed_name(improve) ); send_to_char( buf, ch ); /* Auspice gift */ improve = ch->pcdata->cland[1]; sprintf( buf, "Auspice Gift: %s.\n\r", gift_auspice_name(improve) ); send_to_char( buf, ch ); /* Tribe gift */ improve = ch->pcdata->cland[2]; sprintf( buf, "Tribe Gift: %s.\n\r", gift_tribe_name(improve) ); send_to_char( buf, ch ); send_to_char("--------------------------------------------------------------------------------\n\r",ch); if ( ch->pcdata->cland[0] == -1 ) { send_to_char("Please select a breed gift from the list below.\n\r",ch); send_to_char("--------------------------------------------------------------------------------\n\r",ch); col = 0; for ( sn = 0; sn <= BREED_MAX; sn++ ) { sprintf( buf, "%-15s ", gift_breed_name( sn ) ); send_to_char( buf, ch ); if ( ++col % 3 == 0 ) send_to_char( "\n\r", ch ); } if ( col % 3 != 0 ) send_to_char( "\n\r", ch ); send_to_char("--------------------------------------------------------------------------------\n\r",ch); return; } if ( ch->pcdata->cland[1] == -1 ) { send_to_char("Please select an auspice gift from the list below.\n\r",ch); send_to_char("--------------------------------------------------------------------------------\n\r",ch); col = 0; for ( sn = 0; sn <= AUSPICE_MAX; sn++ ) { sprintf( buf, "%-15s ", gift_auspice_name( sn ) ); send_to_char( buf, ch ); if ( ++col % 3 == 0 ) send_to_char( "\n\r", ch ); } if ( col % 3 != 0 ) send_to_char( "\n\r", ch ); send_to_char("--------------------------------------------------------------------------------\n\r",ch); return; } if ( ch->pcdata->cland[2] == -1 && strlen(ch->clan) > 1 ) { send_to_char("Please select a tribe gift from the list below.\n\r",ch); send_to_char("--------------------------------------------------------------------------------\n\r",ch); col = 0; for ( sn = 0; sn <= TRIBE_MAX; sn++ ) { sprintf( buf, "%-15s ", gift_tribe_name( sn ) ); send_to_char( buf, ch ); if ( ++col % 3 == 0 ) send_to_char( "\n\r", ch ); } if ( col % 3 != 0 ) send_to_char( "\n\r", ch ); send_to_char("--------------------------------------------------------------------------------\n\r",ch); return; } return; } if (!str_cmp(arg,"homid")) {improve = BREED_HOMID;gtype = 0;} else if (!str_cmp(arg,"lupus")) {improve = BREED_LUPUS;gtype = 0;} else if (!str_cmp(arg,"metis")) {improve = BREED_METIS;gtype = 0;} else if (!str_cmp(arg,"ragabash")) {improve = AUSPICE_RAGABASH;gtype = 1;} else if (!str_cmp(arg,"theurge")) {improve = AUSPICE_THEURGE;gtype = 1;} else if (!str_cmp(arg,"philodox")) {improve = AUSPICE_PHILODOX;gtype = 1;} else if (!str_cmp(arg,"galliard")) {improve = AUSPICE_GALLIARD;gtype = 1;} else if (!str_cmp(arg,"ahroun")) {improve = AUSPICE_AHROUN;gtype = 1;} else if (!str_cmp(arg,"black furies")) {improve = TRIBE_BLACK_FURIES;gtype = 2;} else if (!str_cmp(arg,"bone gnawers")) {improve = TRIBE_BONE_GNAWERS;gtype = 2;} else if (!str_cmp(arg,"children of gaia")) {improve = TRIBE_CHILDREN_OF_GAIA;gtype = 2;} else if (!str_cmp(arg,"fianna")) {improve = TRIBE_FIANNA;gtype = 2;} else if (!str_cmp(arg,"get of fenris")) {improve = TRIBE_GET_OF_FENRIS;gtype = 2;} else if (!str_cmp(arg,"get of fenris")) {improve = TRIBE_GET_OF_FENRIS;gtype = 2;} else if (!str_cmp(arg,"glass walkers")) {improve = TRIBE_GLASS_WALKERS;gtype = 2;} else if (!str_cmp(arg,"red talons")) {improve = TRIBE_RED_TALONS;gtype = 2;} else if (!str_cmp(arg,"shadow lords")) {improve = TRIBE_SHADOW_LORDS;gtype = 2;} else if (!str_cmp(arg,"silent striders")) {improve = TRIBE_SILENT_STRIDERS;gtype = 2;} else if (!str_cmp(arg,"silver fangs")) {improve = TRIBE_SILVER_FANGS;gtype = 2;} else if (!str_cmp(arg,"stargazers")) {improve = TRIBE_STARGAZERS;gtype = 2;} else if (!str_cmp(arg,"uktena")) {improve = TRIBE_UKTENA;gtype = 2;} else if (!str_cmp(arg,"wendigos")) {improve = TRIBE_WENDIGOS;gtype = 2;} else { send_to_char("You know of no such gift.\n\r",ch); return; } switch (gtype) { default: if (ch->pcdata->cland[0] != -1) { send_to_char("You already have a breed gift.\n\r",ch); return; } if (ch->pcdata->breed[improve] != 0) { send_to_char("You already know that gift.\n\r",ch); return; } ch->pcdata->cland[0] = improve; ch->pcdata->breed[improve] = -1; break; case 1: if (ch->pcdata->cland[1] != -1) { send_to_char("You already have an auspice gift.\n\r",ch); return; } if (ch->pcdata->auspice[improve] != 0) { send_to_char("You already know that gift.\n\r",ch); return; } ch->pcdata->cland[1] = improve; ch->pcdata->auspice[improve] = -1; break; case 2: if (strlen(ch->clan) < 2 && ch->vampgen > 2) { send_to_char("Ronin are not permitted a tribe gift.\n\r",ch); return; } if (ch->pcdata->cland[2] != -1) { send_to_char("You already have a tribe gift.\n\r",ch); return; } if (ch->pcdata->tribes[improve] != 0) { send_to_char("You already know that gift.\n\r",ch); return; } ch->pcdata->cland[2] = improve; ch->pcdata->tribes[improve] = -1; break; } send_to_char("Ok.\n\r",ch); return; } char *gift_breed_name( int gift_no ) { static char disc[6]; switch ( gift_no ) { default: strcpy(disc,"None"); break; case BREED_HOMID: strcpy(disc,"Homid"); break; case BREED_LUPUS: strcpy(disc,"Lupus"); break; case BREED_METIS: strcpy(disc,"Metis"); break; } return &disc[0]; } char *gift_auspice_name( int gift_no ) { static char disc[9]; switch ( gift_no ) { default: strcpy(disc,"None"); break; case AUSPICE_RAGABASH: strcpy(disc,"Ragabash"); break; case AUSPICE_THEURGE: strcpy(disc,"Theurge"); break; case AUSPICE_PHILODOX: strcpy(disc,"Philodox"); break; case AUSPICE_GALLIARD: strcpy(disc,"Galliard"); break; case AUSPICE_AHROUN: strcpy(disc,"Ahroun"); break; } return &disc[0]; } char *gift_tribe_name( int gift_no ) { static char disc[17]; switch ( gift_no ) { default: strcpy(disc,"None"); break; case TRIBE_BLACK_FURIES: strcpy(disc,"Black Furies"); break; case TRIBE_BONE_GNAWERS: strcpy(disc,"Bone Gnawers"); break; case TRIBE_CHILDREN_OF_GAIA: strcpy(disc,"Children of Gaia"); break; case TRIBE_FIANNA: strcpy(disc,"Fianna"); break; case TRIBE_GET_OF_FENRIS: strcpy(disc,"Get of Fenris"); break; case TRIBE_GLASS_WALKERS: strcpy(disc,"Glass Walkers"); break; case TRIBE_RED_TALONS: strcpy(disc,"Red Talons"); break; case TRIBE_SHADOW_LORDS: strcpy(disc,"Shadow Lords"); break; case TRIBE_SILENT_STRIDERS: strcpy(disc,"Silent Striders"); break; case TRIBE_SILVER_FANGS: strcpy(disc,"Silver Fangs"); break; case TRIBE_STARGAZERS: strcpy(disc,"Stargazers"); break; case TRIBE_UKTENA: strcpy(disc,"Uktena"); break; case TRIBE_WENDIGOS: strcpy(disc,"Wendigos"); break; } return &disc[0]; }