/*************************************************************************** * God Wars Mud originally written by KaVir aka Richard Woolcock. * * Changes done to the code done by Sage aka Walter Howard, this mud is * * for the public, however if you run this code it means you agree * * to the license.low, license.gw, and license.merc have fun. :) * ***************************************************************************/ /*Demon's Sage/Dunkirk*/ #if defined(macintosh) #include <types.h> #else #include <sys/types.h> #endif #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include "merc.h" void frost_breath args(( CHAR_DATA *ch, CHAR_DATA *victim, bool all)); DECLARE_DO_FUN( do_stance ); void do_immolate(CHAR_DATA *ch, char *argument) { OBJ_DATA *obj; if (!IS_CLASS(ch, CLASS_DEMON)) { stc("Huh?\n\r",ch); return; } if (!IS_DEMPOWER(ch, DEM_IMMOLATE)) { stc("You have not been granted that power.\n\r",ch); return; } if (argument[0] == '\0') { send_to_char("Which item do you wish to immolate?\n\r", ch); return; } if ( (obj = get_obj_carry(ch, argument)) == NULL) { send_to_char("You are not carrying that item.\n\r", ch); return; } if (obj->item_type != ITEM_WEAPON) { send_to_char("That is not a weapon!\n\r", ch); return; } if (dice(1, 100) == 1) { act("$p explodes in a burst of flames.", ch,obj, NULL, TO_ROOM); act("$p explodes in a burst of flames.", ch,obj, NULL, TO_CHAR); damage(ch,ch,500,gsn_inferno); extract_obj(obj); return; } if (IS_WEAP(obj, WEAPON_FLAMING)) { act("$p is already flaming.", ch, obj, NULL, TO_CHAR); return; } act("$p bursts into flames.", ch, obj, NULL, TO_CHAR); act("$p, carried by $n bursts into flames.", ch, obj, NULL, TO_ROOM); WAIT_STATE(ch, 8); SET_BIT(obj->weapflags, WEAPON_FLAMING); } void do_leech(CHAR_DATA *ch, char *argument) { CHAR_DATA *victim = NULL; char buf[MAX_STRING_LENGTH]; if (!IS_CLASS(ch, CLASS_DEMON)) { stc("Huh?\n\r",ch); return; } if (!IS_DEMPOWER( ch, DEM_LEECH)) { stc("You do not have that power.\n\r",ch); return; } if (argument[0] == '\0') { stc("Who's life do you wish to leech off of?\n\r", ch); return; } if ((victim = get_char_room(ch, argument)) == NULL) { stc("They aren't here.\n\r", ch); return; } if (is_safe(ch, victim)) return; WAIT_STATE(ch, 10); act("$n stares intently at $N.", ch, NULL, victim, TO_NOTVICT); act("You stare intently at $N.", ch, NULL, victim, TO_CHAR); act("$n stares intently at you.", ch, NULL, victim, TO_VICT); if (victim->hit >= 1000) { sh_int power; sh_int dam; power = (ch->pcdata->stats[UNI_GEN]); dam = dice(power, power + 2); if (dam > 300) dam = 300 + (dam / 10); victim->hit -= dam; ch->hit += dam; if (ch->hit >= ch->max_hit + 500) ch->hit = ch->max_hit + 500; sprintf(buf,"You absorb %d hitpoints.\n\r",dam); stc(buf,ch); sprintf(buf,"%s absorbed %d of your hitpoints!\n\r",ch->name,dam); stc(buf,victim); } else stc("Nothing seemed to happen.\n\r",ch); return; } void do_unnerve(CHAR_DATA *ch, char *argument) { CHAR_DATA *victim; if (!IS_CLASS(ch, CLASS_DEMON)) { stc("Huh?\n\r",ch); return; } if (!IS_DEMPOWER(ch, DEM_UNNERVE)) { stc("You have not been granted that power.\n\r",ch); return; } if (argument[0] == '\0') { stc("Who do you wish to unnerve?\n\r", ch); return; } if ( ( victim = get_char_room(ch, argument) ) == NULL) { stc("They aren't here.\n\r", ch); return; } WAIT_STATE(ch, 7); do_say(ch,"{rXeus Dominus Mortai!{x"); do_stance(victim, ""); } void do_wfreeze(CHAR_DATA *ch, char *argument) { OBJ_DATA *obj; if (!IS_CLASS(ch, CLASS_DEMON)) { stc("Huh?\n\r",ch); return; } if (!IS_DEMPOWER(ch, DEM_FREEZEWEAPON)) { stc("You have not been granted that power.\n\r",ch); return; } if (argument[0] == '\0') { send_to_char("Which item do you wish to freeze?\n\r", ch); return; } if ( (obj = get_obj_carry(ch, argument)) == NULL) { send_to_char("You are not carrying that item.\n\r", ch); return; } if (obj->item_type != ITEM_WEAPON) { send_to_char("That is not a weapon!\n\r", ch); return; } if (dice(1, 100) == 1) { act("$p freezes and shatters.", ch,obj, NULL, TO_ROOM); act("$p freezes and shatters.", ch,obj, NULL, TO_CHAR); extract_obj(obj); return; } if (IS_WEAP(obj, WEAPON_FROST)) { act("$p is already frozen.", ch, obj, NULL, TO_CHAR); return; } act("$p is surrounded by ice crystals.", ch, obj, NULL, TO_CHAR); act("$p, carried by $n is surrounded by ice crystals.", ch, obj, NULL, TO_ROOM); WAIT_STATE(ch, 8); SET_BIT(obj->weapflags, WEAPON_FROST); } void do_graft(CHAR_DATA *ch, char *argument) { OBJ_DATA *obj; char arg[MAX_INPUT_LENGTH]; argument = one_argument(argument, arg); if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_DEMON)) { stc("Huh?\n\r",ch); return; } if (!IS_DEMPOWER( ch, DEM_GRAFT) && IS_CLASS(ch,CLASS_DEMON)) { stc("You need to get graft first.\n\r",ch); return; } if ( arg[0] == '\0') { stc("Which limb do you wish to graft on to yourself?\n\r",ch); return; } if ( ( obj = get_obj_carry(ch,arg) ) == NULL ) { stc("You do not have that limb.\n\r",ch); return; } if(strstr(obj->name,"arm")) // if ( str_cmp(obj->name, "arm mob" ) ) { stc("That's not even an arm!\n\r",ch); return; } if (IS_SET(ch->newbits, THIRD_HAND) && IS_SET(ch->newbits, FOURTH_HAND)) { stc("You already have four arms!\n\r",ch); return; } if (!IS_SET(ch->newbits, THIRD_HAND)) { act("You graft an arm onto your body.",ch,NULL,obj,TO_CHAR); act("$n grafts an arm onto $m body.",ch,NULL,obj,TO_ROOM); SET_BIT(ch->newbits, THIRD_HAND); WAIT_STATE(ch, 18); extract_obj(obj); return; } if (!IS_SET(ch->newbits, FOURTH_HAND)) { act("You graft an arm onto your body.",ch,NULL,obj,TO_CHAR); act("$n grafts an arm onto $m body.",ch,NULL,obj,TO_ROOM); SET_BIT(ch->newbits, FOURTH_HAND); WAIT_STATE(ch, 18); extract_obj(obj); return; } return; } void do_caust(CHAR_DATA *ch, char *argument) { OBJ_DATA *obj; if (!IS_CLASS(ch, CLASS_DEMON)) { stc("Huh?\n\r",ch); return; } if (!IS_DEMPOWER(ch, DEM_CAUST)) { stc("You have not been granted that power.\n\r",ch); return; } if (argument[0] == '\0') { send_to_char("Which item do you wish to caust?\n\r", ch); return; } if ( (obj = get_obj_carry(ch, argument)) == NULL) { send_to_char("You are not carrying that item.\n\r", ch); return; } if (obj->item_type != ITEM_WEAPON) { send_to_char("That is not a weapon!\n\r", ch); return; } if (dice(1, 100) == 1) { act("$p is disintegrated by $n's poison.", ch,obj, NULL, TO_ROOM); act("Your poison eats through $p.", ch,obj, NULL, TO_CHAR); extract_obj(obj); return; } if (IS_WEAP(obj, WEAPON_POISON)) { act("$p is already coated with deadly poison.", ch, obj, NULL, TO_CHAR); return; } act("You run your tongue along $p, coating it with a sickly venom.", ch, obj, NULL, TO_CHAR); act("$n runs $m tongue along $p, coating it with a sickly venom.", ch, obj, NULL, TO_ROOM); WAIT_STATE(ch, 8); SET_BIT(obj->weapflags, WEAPON_POISON); obj->value[1] += ch->pcdata->stats[UNI_GEN]; obj->value[2] += ch->pcdata->stats[UNI_GEN]; } void do_blink(CHAR_DATA *ch, char *argument) { CHAR_DATA *victim; if (!IS_CLASS(ch, CLASS_DEMON)) { stc("Huh?\n\r",ch); return; } if (!IS_DEMPOWER(ch, DEM_BLINK)) { stc("You have not been granted the power of Blinking.\n\r",ch); return; } if (ch->fighting == NULL && argument[0] == '\0') { stc("Who do you wish to blink into combat with?\n\r", ch); return; } if (ch->fighting == NULL) { if ( (victim = get_char_room(ch, argument) ) == NULL) { stc("They aren't here.\n\r", ch); return; } if (ch == victim) { stc("You can't blink into combat with yourself.\n\r", ch); return; } if (is_safe(ch, victim)) return; WAIT_STATE(ch, 30); SET_BIT(ch->flag2, AFF2_BLINK_1ST_RD); stop_fighting(ch, TRUE); stc("You pop out of existance.\n\r", ch); act("$n pops out of existance.", ch, NULL, NULL, TO_ROOM); ch->blinkykill = victim; return; } WAIT_STATE(ch, 30); victim = ch->fighting; SET_BIT(ch->flag2, AFF2_BLINK_2ND_RD); stop_fighting(ch, TRUE); stc("You pop out of existance.\n\r", ch); act("$n pops out of existance.", ch, NULL, NULL, TO_ROOM); ch->blinkykill = victim; WAIT_STATE(ch, 30); }