/*---------------------------------------------------------------------------------X | <(()Seeds of Hate: Swords & Sorcery Edition())> | | _\|::>< Warlock Class ><::|/_ | | |Class Tier Number: I| | | |Coder: Chino| | | *Warlock is an original class made for Seeds of Hate, Swords & Sorcery Edition! | | Please don't copy without permission and due credit! | | Thanks. | | -Trent, God of PaiN! (ASDF!) | X----------------------------------------------------------------------------------X */ #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" #include "interp.h" void do_arts( CHAR_DATA *ch, char *argument ) { char arg1[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; char arg3[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; argument = one_argument( argument, arg1 ); argument = one_argument( argument, arg2 ); argument = one_argument( argument, arg3 ); if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_WIZARD)) { send_to_char("Huh?\n\r",ch); return; } if (arg1[0] == '\0' && arg2[0] == '\0') { stc(" #0_..#7-+=|#W*#7|=+-#0._\n\r",ch); stc(" #0/ / \\ \n\r",ch); stc(" #0/ / \\ \n\r",ch); stc(" #0|#p.#0| #RArts#0 |\n\r",ch); stc(" #0|#p.#0| |\n\r",ch); sprintf(buf," #0|#p.#0| #rSkills #R[#y%2d#R] #0|\n\r",ch->pcdata->powers[WL_SKILLS]); stc(buf,ch); stc(" #0|#p.#0| |\n\r",ch); sprintf(buf," #0|#p.#0|#p.#bSpells #R[#y%2d#R] #0|\n\r",ch->pcdata->stats[WL_SPELLS]); stc(buf,ch); stc(" #0|#p.#0|#p..#0 |\n\r",ch); stc(" #0|#p.#0|#p... #0|\n\r",ch); stc(" #g*#G.#0|#p.#0|#p... . #0 |#g*#G.#g*#G.#g*#G.\n\r",ch); stc("#G.#g*#G.#g*#0\\#p.#0|#p.... .. #0 |#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*\n\r",ch); stc("#g*#G.#g*#G.#g*#0\\|#p...#0_#p..#0_#p.#0______|#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*\n\r",ch); stc(" #g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*\n\r",ch); stc(" #G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*\n\r",ch); return; } if (arg2[0] == '\0') { if (!str_cmp(arg1,"skills")) { send_to_char("#rSkills - #RThe physical skills necessary for the Warlock's power.\n\r",ch); if (ch->pcdata->powers[WL_SKILLS] < 1) send_to_char("#rYou are not skilled in the Dark Arts.\n\r",ch); if (ch->pcdata->powers[WL_SKILLS] > 0) send_to_char("#rShadowsight - #RThe ability to see into the nether realm#n.\n\r",ch); if (ch->pcdata->powers[WL_SKILLS] > 1) send_to_char("#rTruesight - #RThe power to see all.#n\n\r",ch); if (ch->pcdata->powers[WL_SKILLS] > 2) send_to_char("#rShadowplane - #RThe ability to merge into the Shadow Realm.#n\n\r",ch); if (ch->pcdata->powers[WL_SKILLS] > 3) send_to_char("#rEnhanced Mnemonics - #RGreatly improved Warlock spellcasting (auto)#n\n\r",ch); return; } else if (!str_cmp(arg1,"spells")) { sprintf(buf,"#y00#R=============================#y00\n\r"); stc(buf, ch); sprintf(buf," #R( #ySpells#R )\n\r"); stc(buf, ch); sprintf(buf," #R(#y=============================#R)\n\r"); stc(buf, ch); if (ch->pcdata->stats[WL_SPELLS] < 1){ sprintf(buf," #R( #CFirebolt #P[ ] #R)\n\r"); stc(buf, ch);} else{ sprintf(buf," #R( #CFirebolt #P[#yX#P] #R)\n\r"); stc(buf, ch);} if (ch->pcdata->stats[WL_SPELLS] < 2){ sprintf(buf," #R( #CNegativity #P[ ] #R)\n\r"); stc(buf, ch);} else{ sprintf(buf," #R( #CNegativity #P[#yX#P] #R)\n\r"); stc(buf, ch);} if (ch->pcdata->stats[WL_SPELLS] < 3){ sprintf(buf," #R( #CThunderclap #P[ ] #R)\n\r"); stc(buf, ch);} else{ sprintf(buf," #R( #CThunderclap #P[#yX#P] #R)\n\r"); stc(buf, ch);} if (ch->pcdata->stats[WL_SPELLS] < 4){ sprintf(buf," #R( #CIcelance #P[ ] #R)\n\r"); stc(buf, ch);} else{ sprintf(buf," #R( #CIcelance #P[#yX#P] #R)\n\r"); stc(buf, ch);} if (ch->pcdata->stats[WL_SPELLS] < 5){ sprintf(buf," #R( #CPhase Shift #P[ ] #R)\n\r"); stc(buf, ch);} else{ sprintf(buf," #R( #CPhase Shift #P[#yX#P] #R)\n\r"); stc(buf, ch);} if (ch->pcdata->stats[WL_SPELLS] < 6){ sprintf(buf," #R( #CChaos Sphere #P[ ] #R)\n\r"); stc(buf, ch);} else{ sprintf(buf," #R( #CChaos Sphere #P[#yX#P] #R)\n\r"); stc(buf, ch);} if (ch->pcdata->stats[WL_SPELLS] < 7){ sprintf(buf," #R( #CParadise Lost #P[ ] #R)\n\r"); stc(buf, ch);} else{ sprintf(buf," #R( #CParadise Lost #P[#yX#P] #R)\n\r"); stc(buf, ch);} if (ch->pcdata->stats[WL_SPELLS] < 8){ sprintf(buf," #R( #CHellblades #P[ ] #R)\n\r"); stc(buf, ch);} else{ sprintf(buf," #R( #CHellblades #P[#yX#P] #R)\n\r"); stc(buf, ch);} if (ch->pcdata->stats[WL_SPELLS] < 9){ sprintf(buf," #R( #CVortex #P[ ] #R)\n\r"); stc(buf, ch);} else{ sprintf(buf," #R( #CVortex #P[#yX#P] #R)\n\r"); stc(buf, ch);} if (ch->pcdata->stats[WL_SPELLS] < 10){ sprintf(buf," #R( #CEntropy #P[ ] #R)\n\r"); stc(buf, ch);} else{ sprintf(buf," #R( #CEntropy #P[#yX#P] #R)\n\r"); stc(buf, ch);} if (ch->pcdata->stats[WL_SPELLS] < 11){ sprintf(buf," #R( #CWrath of the Damned #P[ ] #R)\n\r"); stc(buf, ch);} else{ sprintf(buf," #R( #CWrath of the Damned #P[#yX#P] #R)\n\r"); stc(buf, ch);} sprintf(buf,"#y00#R=============================#y00\n\r"); stc(buf, ch); return; } stc(" #0_..#7-+=|#W*#7|=+-#0._\n\r",ch); stc(" #0/ / \\ \n\r",ch); stc(" #0/ / \\ \n\r",ch); stc(" #0|#p.#0| #RArts#0 |\n\r",ch); stc(" #0|#p.#0| |\n\r",ch); sprintf(buf," #0|#p.#0| #rSkills #R[#y%2d#R] #0|\n\r",ch->pcdata->powers[WL_SKILLS]); stc(buf,ch); stc(" #0|#p.#0| |\n\r",ch); sprintf(buf," #0|#p.#0|#p.#bSpells #R[#y%2d#R] #0|\n\r",ch->pcdata->powers[WL_SPELLS]); stc(buf,ch); stc(" #0|#p.#0|#p..#0 |\n\r",ch); stc(" #0|#p.#0|#p... #0|\n\r",ch); stc(" #g*.#0|#p.#0|#p... . #0 |#g*#G.#g*#G.#g*#G.\n\r",ch); stc("#g.#g*.#g*#0\\#p.#0|#p.... .. #0 |#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*\n\r",ch); stc("#g*.#g*.#g*#0\\|#p...#0_#p..#0_#p.#0______|#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*\n\r",ch); stc(" #g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*\n\r",ch); stc(" #G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*#G.#g*\n\r",ch); return; } else if (!str_cmp(arg2,"gain") && !str_cmp(arg1,"skills")) { int cost; int max = 4; cost = (ch->pcdata->powers[WL_SKILLS]+1) * 20; if ( ch->pcdata->powers[WL_SKILLS] >= max ) { sprintf(buf,"#rYou have already gained all of the #RW#8arlock#r skills#n\n\r"); send_to_char(buf,ch); return; } if ( cost > ch->practice) { sprintf(buf,"#rYou need #R%d #rprimal to gain another skill#n\n\r", cost); send_to_char(buf,ch); return; } ch->pcdata->powers[WL_SKILLS]++; ch->practice -= cost; sprintf(buf,"#rYour skills increase!#n\n\r"); send_to_char(buf,ch); } else if (!str_cmp(arg2,"gain") && !str_cmp(arg1,"spells")) { int cost; int max = 11; cost = (ch->pcdata->stats[WL_SPELLS]+1) * 20; if ( ch->pcdata->stats[WL_SPELLS] >= max ) { sprintf(buf,"#rYou know the all warlock spells!#n\n\r"); send_to_char(buf,ch); return; } if ( cost > ch->practice) { sprintf(buf,"#rYou need #R%d #rprimal to learn a new spell#n\n\r", cost); send_to_char(buf,ch); return; } ch->pcdata->stats[WL_SPELLS]++; ch->practice -= cost; sprintf(buf,"#rYou gain a new spell!#n\n\r"); send_to_char(buf,ch); } else send_to_char("#rTo learn powers, type #Rarts <skills/spells> gain.#n\n\r",ch); return; } void do_thunderclap( CHAR_DATA *ch, char *argument ) { CHAR_DATA *vch; CHAR_DATA *vch_next; int dam = 0; char buf[MAX_STRING_LENGTH]; if (!IS_CLASS(ch, CLASS_WIZARD)) { stc("Huh?\n\r",ch); return; } if (ch->pcdata->stats[WL_SPELLS] < 3) { stc("#rYou do not yet know this spell.\n\r",ch); return; } if (ch->mana < 10000) { stc("#rYou do not have the required #c10000#r mana.\n\r",ch); return; } for ( vch = ch->in_room->people; vch != NULL; vch = vch_next ) { vch_next = vch->next_in_room; if (vch != ch) vch->position = POS_STUNNED; dam = number_range( vch->hit/32, vch->hit/16); if (ch->pcdata->powers[WL_SKILLS] > 3) dam *= 2; if (vch != ch) vch->hit -= dam; if (vch != ch){ sprintf(buf, "#R%s closes his eyes and brings his hands together, releasing a massive shockwave! #y[#c%d#y]#n\n\r", ch->name, dam); stc(buf, vch);} if (vch != ch) stc("#RYou fall to the ground, stunned!\n\r",vch); if (vch != ch){ sprintf(buf, "#R%s falls to the ground, stunned!\n\r", vch->name); stc(buf, ch);} if (vch->hit < -10) vch->hit = -10; } sprintf(buf, "#RYou close your eyes and bring your hands together, releasing a massive shockwave! #y[#c%d#y]#n\n\r", dam); stc(buf, ch); ch->fight_timer += 10; ch->mana -= 10000; WAIT_STATE(ch, PULSE_VIOLENCE); return; } void do_hellblades( CHAR_DATA *ch, char *argument ) { char arg1[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; CHAR_DATA *victim; OBJ_DATA *obj; int cost = 0; argument = one_argument( argument, arg1); if (!IS_CLASS(ch, CLASS_WIZARD)) { send_to_char("Huh?\n\r",ch); return; } if ( arg1[0] == '\0' ) { stc("#RUse hellblades on who?\n\r",ch); return; } if ((victim = get_char_room(ch, arg1)) == NULL) { stc("#RThey aren't here.\n\r", ch); return; } if (victim == ch) { stc("#RYeah ok..... dork....\n\r",ch); return; } if (!IS_CLASS(ch, CLASS_WIZARD)) { stc("#RHuh?\n\r",ch); return; } if (ch->pcdata->stats[WL_SPELLS] < 8) { stc("#RYou do not yet have mastery of this spell.\n\r",ch); return; } if (is_safe(ch,victim)) return; if (ch->pcdata->powers[WL_SKILLS] < 4) cost = 20000; if (ch->pcdata->powers[WL_SKILLS] > 3) cost = 15000; if (ch->mana < 20000 && ch->pcdata->powers[WL_SKILLS] < 4) { stc("#RYou do not have the #y20000#R required mana.\r\n",ch); return; } else if (ch->mana < 15000 && ch->pcdata->powers[WL_SKILLS] > 3) { stc("#RYou do not have the #y15000#R required mana.\r\n",ch); return; } //Left Arm if (IS_ARM_L(victim,LOST_ARM)) { sprintf( buf, "#y%s#R has already lost his left arm.\n\r", victim->name); stc( buf, ch); return; } if (!IS_ARM_L(victim,LOST_ARM)) SET_BIT(victim->loc_hp[2],LOST_ARM); else { sprintf( buf, "#y%s#R has already lost his left arm.\n\r", victim->name); stc( buf, ch); return; } if (!IS_BLEEDING(victim,BLEEDING_ARM_L)) SET_BIT(victim->loc_hp[6],BLEEDING_ARM_L); if (IS_BLEEDING(victim,BLEEDING_HAND_L)) REMOVE_BIT(victim->loc_hp[6],BLEEDING_HAND_L); act("#RYour hellblades spin around you, cutting off #y$N's#R left arm!",ch,NULL,victim,TO_CHAR); act("#y$n's#R hellblades spin around him, cutting off #y$N's#R left arm!",ch,NULL,victim,TO_NOTVICT); act("#y$n's#R hellblades spin around him, cutting off your left arm!",ch,NULL,victim,TO_VICT); make_part(victim,"arm"); if (IS_ARM_L(victim,LOST_ARM) && IS_ARM_R(victim,LOST_ARM)) { if ((obj = get_eq_char( victim, WEAR_ARMS )) != NULL) take_item(victim,obj); } if ((obj = get_eq_char( victim, WEAR_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_ARM_R(victim,LOST_ARM)) { sprintf( buf, "#y%s#R has already lost his right arm.\n\r", victim->name); stc( buf, ch); return; } if (!IS_ARM_R(victim,LOST_ARM)) SET_BIT(victim->loc_hp[3],LOST_ARM); else { sprintf( buf, "#y%s#R has already lost his right arm.\n\r", victim->name); stc( buf, ch); return; } if (!IS_BLEEDING(victim,BLEEDING_ARM_R)) SET_BIT(victim->loc_hp[6],BLEEDING_ARM_R); if (IS_BLEEDING(victim,BLEEDING_HAND_R)) REMOVE_BIT(victim->loc_hp[6],BLEEDING_HAND_R); act("#RYour hellblades spin around you, cutting off #y$N's#R right arm!",ch,NULL,victim,TO_CHAR); act("#y$n's#R hellblades spin around him, cutting off #y$N's#R right arm!",ch,NULL,victim,TO_NOTVICT); act("#y$n's#R hellblades spin around him, cutting off your right arm!",ch,NULL,victim,TO_VICT); make_part(victim,"arm"); if (IS_ARM_L(victim,LOST_ARM) && IS_ARM_R(victim,LOST_ARM)) { if ((obj = get_eq_char( victim, WEAR_ARMS )) != NULL) take_item(victim,obj); } if ((obj = get_eq_char( victim, WEAR_WIELD )) != NULL) take_item(victim,obj); if ((obj = get_eq_char( victim, WEAR_HANDS )) != NULL) take_item(victim,obj); if ((obj = get_eq_char( victim, WEAR_WRIST_R )) != NULL) take_item(victim,obj); if ((obj = get_eq_char( victim, WEAR_FINGER_R )) != NULL) take_item(victim,obj); // more fun stuff with mnemonic enhancement if (ch->pcdata->powers[WL_SKILLS] > 3 && number_range(1, 20) < 5) { //left leg if (IS_LEG_L(victim,LOST_LEG)) { sprintf( buf, "#y%s#R has already lost his left leg.\n\r", victim->name); stc( buf, ch); return; } if (!IS_LEG_L(victim,LOST_LEG)) SET_BIT(victim->loc_hp[4],LOST_LEG); else { sprintf( buf, "#y%s#R has already lost his left leg.\n\r", victim->name); stc( buf, ch); return; } if (!IS_BLEEDING(victim,BLEEDING_LEG_L)) SET_BIT(victim->loc_hp[6],BLEEDING_LEG_L); if (IS_BLEEDING(victim,BLEEDING_FOOT_L)) REMOVE_BIT(victim->loc_hp[6],BLEEDING_FOOT_L); act("#RYour hellblades spin around you, cutting off #y$N's#R left leg!",ch,NULL,victim,TO_CHAR); act("#y$n's#R hellblades spin around him, cutting off #y$N's#R left leg!",ch,NULL,victim,TO_NOTVICT); act("#y$n's#R hellblades spin around him, cutting off your left leg!",ch,NULL,victim,TO_VICT); 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); //right leg if (IS_LEG_R(victim,LOST_LEG)) { sprintf( buf, "#y%s#R has already lost his right leg.\n\r", victim->name); stc( buf, ch); return; } if (!IS_LEG_R(victim,LOST_LEG)) SET_BIT(victim->loc_hp[5],LOST_LEG); else { sprintf( buf, "#y%s#R has already lost his right leg.\n\r", victim->name); stc( buf, ch); return; } if (!IS_BLEEDING(victim,BLEEDING_LEG_R)) SET_BIT(victim->loc_hp[6],BLEEDING_LEG_R); if (IS_BLEEDING(victim,BLEEDING_FOOT_R)) REMOVE_BIT(victim->loc_hp[6],BLEEDING_FOOT_R); act("#RYour hellblades spin around you, cutting off #y$N's#R right leg!",ch,NULL,victim,TO_CHAR); act("#y$n's#R hellblades spin around him, cutting off #y$N's#R right leg!",ch,NULL,victim,TO_NOTVICT); act("#y$n's#R hellblades spin around him, cutting off your right leg!",ch,NULL,victim,TO_VICT); 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 (ch->pcdata->powers[WL_SKILLS] > 3 && number_range(1, 100) < 5 && !IS_NPC(victim)) { behead( victim ); sprintf( buf, "#y%s#R is cut to pieces by #y%s's#R hellblades.\n\r", victim->name, ch->name); do_info( ch, buf); ch->pkill ++; victim->pdeath -= 1; ch->race ++; return; } victim->hit *= .9; ch->mana -= cost; return; } void do_wrath( CHAR_DATA *ch, char *argument ) { CHAR_DATA *victim; char arg1[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; int dam; argument = one_argument( argument, arg1 ); if (!IS_CLASS(ch, CLASS_WIZARD)) { send_to_char("Huh?\n\r",ch); return; } if ( arg1[0] == '\0') { send_to_char( "#RRelease the Wrath of the Damned on who?\n\r", ch ); return; } if (ch->pcdata->stats[WL_SPELLS] < 11) { stc("#RYou do not yet have mastery of this spell.\n\r",ch); return; } if ((victim = get_char_world(ch, arg1)) == NULL) { sprintf(buf, "#y%s#R is not here.\n\r",arg1); stc( buf, ch); return; } if (victim->level < LEVEL_AVATAR) { stc("Not on mortals.\n\r",ch); return; } if (ch->mana < 5000) { stc("#RYou do not have the 5000 required mana.\n\r",ch); return; } if (IS_BODY(victim, BROKEN_SPINE)) { sprintf(buf, "#y%s#R already has a broken spine.\n\r",victim->name); stc( buf, ch); return; } act("#RYou close your eyes and chant dark words, calling forth the damned to release their wrath upon #y$N#R.", ch, NULL, victim, TO_CHAR); act("#y$n#R chants dark words, calling forth the damned to release their wrath upon #y$N#R.", ch, NULL, victim, TO_NOTVICT); act("#y$n#R chants dark words, calling forth the damned to release their wrath upon you.#n", ch, NULL, victim, TO_VICT); SET_BIT(victim->loc_hp[1],BROKEN_SPINE); act("#y$N#R screams in agony as $S spine is snapped with a gruesome #C*#yPOP#C*#n.", ch, NULL, victim, TO_NOTVICT); act("#y$N#R screams in agony as $S spine is snapped with a gruesome #C*#yPOP#C*#n", ch, NULL, victim, TO_CHAR); stc("#RYou scream in agony as your spine is snapped with a gruesome #C*#yPOP#C*#n", victim); dam = (victim->hit) / 8; if (ch->pcdata->powers[WL_SKILLS] > 3) dam *= 2; hurt_person(ch, victim, dam); ch->mana -= 5000; return; } void do_firebolt( CHAR_DATA *ch, char *argument) { CHAR_DATA *victim; char arg1[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; int dam; argument = one_argument( argument, arg1 ); if (IS_NPC(ch) ) return; if (!IS_CLASS(ch, CLASS_WIZARD)) { send_to_char("Huh?\n\r",ch); return; } if ( arg1[0] == '\0') { send_to_char( "#RCast firebolt on whom?\n\r", ch ); return; } if ( ( victim = get_char_room( ch, arg1 ) ) == NULL ) { send_to_char( "#RThey aren't here.#n\n\r", ch ); return; } if (victim->level < LEVEL_AVATAR) { stc("Not on mortals.\n\r",ch); return; } if ((victim == ch)) { stc("#RYeah ok...\n\r",ch); return; } if (ch->pcdata->stats[WL_SPELLS] < 1) { stc("#RYou do not yet have mastery of this spell.\n\r",ch); return; } if (ch->mana < 1000) { stc("#RYou do not have the required 1000 mana.\n\r",ch); return; } dam = number_range(2000, 3500); if (ch->pcdata->powers[WL_SKILLS] > 3) { dam += number_range( 750, 1500 ); } if (IS_NPC(victim)) dam *= 1.7; act("#y$n#R points $s hands towards #y$N#R, releasing a powerful bolt of flame.", ch, NULL, victim, TO_NOTVICT); sprintf( buf, "#RYou point your hands toward $N, releasing a powerful blase of flame#n #y[#C%d#y]#n\n\r", dam); act( buf, ch,NULL,victim,TO_CHAR); sprintf( buf, "#y$n#R points his hands towards you, releasing a powerful bolt of flame.#n #y[#C%d#y]#n\n\r", dam); act( buf, ch,NULL,victim,TO_VICT); if (!IS_SET(victim->affected_by, AFF_FLAMING)) SET_BIT(victim->affected_by, AFF_FLAMING); ch->mana -= 1000; hurt_person(ch, victim, dam); if (victim->hit < -10) victim->hit = -10; if (number_percent() < 50) { act("#y$n#R points $s hands towards #y$N#R, releasing a powerful bolt of flame.", ch, NULL, victim, TO_NOTVICT); sprintf( buf, "#RYou point your hands toward $N, releasing a powerful blast of flame#n #y[#C%d#y]#n\n\r", dam); act( buf, ch,NULL,victim,TO_CHAR); sprintf( buf, "#y$n#R points his hands towards you, releasing a powerful bolt of flame.#n #y[#C%d#y]#n\n\r", dam); act( buf, ch,NULL,victim,TO_VICT); if (!IS_SET(victim->affected_by, AFF_FLAMING)) SET_BIT(victim->affected_by, AFF_FLAMING); hurt_person(ch, victim, dam); if (victim->hit < -10) victim->hit = -10; } if (number_percent() < 10) { act("#y$n#R points $s hands towards #y$N#R, releasing a powerful bolt of flame.", ch, NULL, victim, TO_NOTVICT); sprintf( buf, "#RYou point your hands toward $N, releasing a powerful blast of flame#n #y[#C%d#y]#n\n\r", dam); act( buf, ch,NULL,victim,TO_CHAR); sprintf( buf, "#y$n#R points his hands towards you, releasing a powerful bolt of flame.#n #y[#C%d#y]#n\n\r", dam); act( buf, ch,NULL,victim,TO_VICT); if (!IS_SET(victim->affected_by, AFF_FLAMING)) SET_BIT(victim->affected_by, AFF_FLAMING); hurt_person(ch, victim, dam); if (victim->hit < -10) victim->hit = -10; } if (ch->pcdata->powers[WL_SKILLS] > 3) {WAIT_STATE(ch, 4 );} else WAIT_STATE(ch, 8); if (ch->fighting == NULL) ch->fighting = victim; return; } void do_pshift( CHAR_DATA *ch, char *argument ) { ROOM_INDEX_DATA *to_room; EXIT_DATA *pexit; CHAR_DATA *victim; int door; if (!IS_CLASS(ch, CLASS_WIZARD)) { stc("Huh?\n\r",ch); return; } if (ch->pcdata->stats[WL_SPELLS] < 5) { stc("#RYou do not yet have mastery of this spell.#n\n\r",ch); return; } if ( ( victim = ch->fighting ) == NULL ) { if ( ch->position == POS_FIGHTING ) ch->position = POS_STANDING; send_to_char( "You aren't fighting anyone.\n\r", ch ); return; } if(ch->mana < 750) { send_to_char("#RYou d not have the 750 required mana.\n\r",ch); return; } door = number_door( ); if ( ( pexit = ch->in_room->exit[door] ) == NULL || (to_room = pexit->to_room) == NULL) { act( "#y$n#R mutters some words and disappears!", ch, NULL, NULL, TO_ROOM ); send_to_char( "#RYou mutter some dark words and vanish from combat.\n\r", ch ); char_from_room( ch ); char_to_room( ch, get_room_index(ROOM_VNUM_ALTAR)); stop_fighting( ch, TRUE ); return; }; act( "#y$n#R mutters some words and disappears!", ch, NULL, NULL, TO_ROOM ); send_to_char( "#RYou mutter some dark words and vanish from combat.\n\r", ch ); char_from_room(ch); char_to_room( ch, to_room ); do_look(ch,"auto"); stop_fighting( ch, TRUE ); ch->mana -= 750; return; } void do_vortex(CHAR_DATA *ch, char *argument) { ROOM_INDEX_DATA *pRoom; ROOM_INDEX_DATA *pDir; OBJ_DATA *pObj; CHAR_DATA *pChar; int i; if (!IS_CLASS(ch, CLASS_WIZARD)) { send_to_char("Huh?\n\r",ch); return; } if (ch->pcdata->stats[WL_SPELLS] < 9) { stc("#RYou do not yet have mastery over this spell.\n\r",ch); return; } if (ch->mana < 7500) { stc("#RYou do not have the required 7500 mana.\n\r",ch); return; } pRoom = ch->in_room; for ( i = 0; i < 5; i++ ) { char buf[MAX_STRING_LENGTH]; if ( !pRoom->exit[i] || !pRoom->exit[i]->to_room ) continue; pDir = pRoom->exit[i]->to_room; if ( IS_SET(pDir->room_flags,ROOM_SAFE) ) continue; for ( pObj = pDir->contents; pObj; pObj = pDir->contents ) { if (!pObj) continue; if (pObj->in_room == NULL) continue; obj_from_room(pObj); obj_to_room(pObj,pRoom); if ( pDir->people ) { sprintf(buf,"#RA vortex sucks $p to the %s.",dir_name[rev_dir[i]]); // act(buf,pDir->people,pObj,NULL,TO_CHAR); act(buf,pDir->people,pObj,NULL,TO_ROOM); } sprintf(buf,"#RA vortex sucks $p from the %s.",dir_name[i]); act(buf,ch,pObj,NULL,TO_CHAR); act(buf,ch,pObj,NULL,TO_ROOM); } for ( pChar = pDir->people; pChar; pChar = pDir->people ) { if (!pChar) continue; if (pChar->in_room == NULL) continue; if (pChar == ch) continue; sprintf(buf,"#RA vortex sucks $n to the %s.",dir_name[rev_dir[i]]); act(buf,pChar,NULL,NULL,TO_ROOM); sprintf(buf,"#RA vortex sucks you to the %s.",dir_name[rev_dir[i]]); send_to_char(buf,pChar); char_from_room(pChar); char_to_room(pChar,pRoom); sprintf(buf,"#RA vortex sucks $N from the %s.",dir_name[i]); act(buf,ch,NULL,pChar,TO_CHAR); act(buf,ch,NULL,pChar,TO_ROOM); } } ch->mana -= 7500; } void do_plost( CHAR_DATA *ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; CHAR_DATA *victim; char buf[MAX_STRING_LENGTH]; one_argument( argument, arg ); if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_WIZARD)) { send_to_char("Huh?\n\r",ch); return; } if (ch->pcdata->stats[WL_SPELLS] < 7) { send_to_char("#RYou do not yet have mastery over this spell.\n\r",ch); return; } if (ch->mana < 7500) { stc("#RYou do not have the required 7500 mana.\n\r",ch); return; } if ( arg[0] == '\0' ) { send_to_char( "#RCast paradise lost on who?\n\r", ch ); 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( "#RBeware the penguins.#n\n\r", ch ); return; } if ( !IS_AFFECTED(victim, AFF_SANCTUARY) ) { send_to_char( "#RThey don't have sanctuary on!#n\n\r", ch ); return; } REMOVE_BIT(victim->affected_by, AFF_SANCTUARY); send_to_char("#RYour eyes sink into your head as you fill the room with despair.#n\n\r",ch); sprintf(buf, "#y%s#R's eyes sink into his head, and you are overcome with depression.#n\n\r", ch->name); stc( buf, victim); multi_hit( ch, victim, TYPE_UNDEFINED ); multi_hit( ch, victim, TYPE_UNDEFINED ); if (ch->pcdata->powers[WL_SKILLS] > 3) { multi_hit( ch, victim, TYPE_UNDEFINED ); } WAIT_STATE( ch, 3 * PULSE_VIOLENCE ); ch->mana -= 7500; return; } void do_icelance( CHAR_DATA *ch, char *argument) { CHAR_DATA *victim; char arg1[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; int dam; argument = one_argument( argument, arg1 ); if (IS_NPC(ch) ) return; if (!IS_CLASS(ch, CLASS_WIZARD)) { send_to_char("Huh?\n\r",ch); return; } if ( arg1[0] == '\0') { send_to_char( "#RUse icelance on who?\n\r", ch ); return; } if ( ( victim = get_char_room( ch, arg1 ) ) == NULL ) { send_to_char( "#RThey aren't here.#n\n\r", ch ); return; } if ((victim == ch)) { stc("#RYeah ok...\n\r",ch); return; } if (ch->pcdata->stats[WL_SPELLS] < 4) { stc("#RYou do not yet have mastery of this spell.\n\r",ch); return; } if (ch->mana < 5000) { stc("#RYou do not have the required 5000 mana.\n\r",ch); return; } dam = number_range(5000, 7500); if (ch->pcdata->powers[WL_SKILLS] > 3) { dam += number_range( 1250, 2500 ); } if (IS_NPC(victim)) { dam *= 2.5; } act("#y$n#R points $s hands towards #y$N#R and sends forth a wicked spear of ice.", ch, NULL, victim, TO_NOTVICT); sprintf( buf, "#RYou point your hands toward %s and sends forth a wicked spear of ice.#n #y[#C%d#y]#n\n\r", victim->name, dam); stc( buf, ch); sprintf( buf, "#y%s#R points his hands towards you and sends forth a wicked spear of ice.#n #y[#C%d#y]#n\n\r", ch->name, dam); stc( buf, victim); ch->mana -= 5000; victim->hit -= dam; if (!IS_BLEEDING(victim, BLEEDING_THROAT)) SET_BIT(victim->loc_hp[6], BLEEDING_THROAT); if (victim->hit < -10) victim->hit = -10; if (ch->pcdata->powers[WL_SKILLS] > 3) {WAIT_STATE(ch, 8 );} else WAIT_STATE(ch, 16); if (ch->fighting == NULL) ch->fighting = victim; return; } void do_negativity( CHAR_DATA *ch, char *argument) { CHAR_DATA *victim; char buf[MAX_STRING_LENGTH]; char arg[MAX_INPUT_LENGTH]; int dam; argument = one_argument( argument, arg ); if (IS_NPC(ch) ) return; if (!IS_CLASS(ch, CLASS_WIZARD)) { stc("Huh?\n\r",ch); return; } if ( arg[0] == '\0') { send_to_char( "#RCast negativity on who?\n\r", ch ); return; } if ( ( victim = get_char_room( ch, arg ) ) == NULL ) { send_to_char( "#RThey aren't here.#n\n\r", ch ); return; } if ((victim == ch)) { stc("#RYeah ok...\n\r",ch); return; } if (ch->pcdata->stats[WL_SPELLS] < 2) { stc("You do not yet have mastery of this spell.",ch); return; } dam = number_range(2500, 5000); if (ch->pcdata->powers[WL_SKILLS] > 3) dam *= 2; if (ch->mana < dam * 2) { stc("You do not have enough mana for this spell.",ch); return; } hurt_person(ch, victim, dam); ch->hit += dam; ch->mana -= dam; sprintf(buf, "#rYou place your hands on #R%s,#r sucking the life out of them. #B[#R%d#B]#n\n\r", victim->name, dam); stc(buf, ch); sprintf(buf, "#R%s#r places his hands on you, sucking out your life. #B[#R%d#B]#n\n\r", ch->name, dam); stc(buf, victim); WAIT_STATE(ch, 10); return; } void do_chaos( CHAR_DATA *ch, char *argument ) { CHAR_DATA *victim; AFFECT_DATA af; int chaos, dam; char arg[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; argument = one_argument( argument, arg ); if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_WIZARD)) { send_to_char("Huh?\n\r",ch); return; } if (ch->pcdata->stats[WL_SPELLS] < 6) { send_to_char("Huh?\n\r",ch); return; } if ( arg[0] == '\0') { send_to_char( "#RCast chaos orb on whom?\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)) { stc("You cannot attack them.\n\r",ch); return; } if (ch->mana < 5000) { stc("You do not ave the required 5000 mana.\n\r",ch); return; } chaos = number_range(1, 9); act("#r$n#0 begins chanting dark words, summoning forth a sphere of #rc#lh#pa#go#cs#0 to hurl at #r$N!#n", ch, NULL, victim, TO_NOTVICT); sprintf( buf, "#0You summon forth a perfect sphere of #rc#lh#pa#go#cs#0 and hurl it at #r$N!#n\n\r"); act(buf, ch, NULL, victim, TO_CHAR); sprintf( buf, "#r$n#0 summons forth a perfect sphere of #rc#lh#pa#go#cs#0 and hurls it at you!#n\n\r"); act(buf, ch, NULL, victim, TO_VICT); if (chaos == 1 || chaos == 6) { stc("The sphere explodes in a shower of #Ggreen bubbles#n.\n\r",victim); stc("Your sphere explodes in a shower of #Ggreen bubbles#n.\n\r",ch); if ( IS_AFFECTED(victim, AFF_POISON)) return; af.type = gsn_poison; af.duration = chaos * 10; af.location = APPLY_STR; af.modifier = 0 - number_range(1,3); af.bitvector = AFF_POISON; affect_join( victim, &af ); WAIT_STATE(victim, number_range(5, 20)); send_to_char( "#GYou are poisoned!#n\n\r", victim ); } else if (chaos == 2 || chaos == 7 ) { stc("The sphere explodes, forming a #yyellow haze#n.\n\r",victim); stc("Your sphere explodes, forming a #yyellow haze#n.\n\r",ch); if ( IS_AFFECTED(victim, AFF_BLIND)) { af.type = gsn_blindness; af.location = APPLY_HITROLL; af.modifier = -4; af.duration = chaos * 10; af.bitvector = AFF_BLIND; affect_to_char( victim, &af ); WAIT_STATE(victim, number_range(5, 15)); send_to_char( "#yYou are blinded!#n\n\r", victim ); } else { stc("They are already blinded.\n\r",ch); } } else if (chaos == 3 || chaos == 8) { stc("The sphere explodes in a shower of #Rred flames#n.\n\r",victim); stc("Your sphere explodes in a shower of #Rred flames#n.\n\r",ch); WAIT_STATE(victim, number_range(5, 20)); SET_BIT(victim->affected_by, AFF_FLAMING); } else if (chaos == 4 || chaos == 9) { dam = number_range(7500, 15000); sprintf(buf,"The sphere explodes in a scattering of #Lblue sparks#n. #R[#y%d#R]#n\n\r", dam); stc( buf, victim); sprintf(buf,"Your sphere explodes in a scattering of #Lblue sparks#n. #R[#y%d#R]#n\n\r", dam); stc( buf, ch); WAIT_STATE(victim, number_range(5, 8)); hurt_person(ch, victim, dam); } else if (chaos == 5 ) { stc("The sphere dissipates before it hits you#n.\n\r",victim); stc("Your dissipates shortly after casting#n.\n\r",ch); } WAIT_STATE(ch, 4); ch->mana -= 5000; if (victim->hit < -10) victim->hit = -10; return; }