#include "include.h" DECLARE_DO_FUN(do_stand); DECLARE_DO_FUN(do_murder); bool check_songsmith args( (CHAR_DATA *ch, int sn) ); int songsmith_dam args( ( int num, int dice) ); char *target_name; void spell_flight(int sn, int level, CHAR_DATA *ch, void *vo, int target) { CHAR_DATA *vch; AFFECT_DATA af; init_affect(&af); af.where = TO_AFFECTS; af.type = skill_lookup("fly"); af.aftype=AFT_SONG; af.level = level; af.duration = level/2; af.location = 0; af.modifier = 0; af.bitvector = AFF_FLYING; act("{GOh! I have slipped the surly bonds of earth,{x",ch,NULL,NULL,TO_ALL); act("{GAnd danced the skies on laughter-silvered wings;{x",ch,NULL,NULL,TO_ALL); act("{GSunward I've climbed, and joined the tumbling mirth{x",ch,NULL,NULL,TO_ALL); act("{GOf sun-split clouds -- and done a hundred things{x",ch,NULL,NULL,TO_ALL); check_improve(ch,gsn_songsmith,TRUE,6); if (!is_affected( ch, af.type )) { act("$n sings to the sky and is lifted off the ground by the winds.",ch,NULL,NULL,TO_ROOM); send_to_char("You feel yourself standing on the wind.\n\r", ch); affect_to_char( ch,&af ); } for ( vch = ch->in_room->people; vch != NULL; vch = vch->next_in_room) { if (ch == vch) continue; if (!is_same_group(vch,ch) && !is_same_cabal(vch,ch)) continue; if (!IS_NPC(vch)) { if (number_percent() <= 80 && !is_affected( vch, af.type )) { act("$n is lifted off the ground.",vch,NULL,NULL,TO_ROOM); send_to_char("The wind lifts you off the ground.\n\r", vch); affect_to_char( vch, &af ); } } } return; } void spell_dew(int sn, int level, CHAR_DATA *ch, void *vo, int target) { CHAR_DATA *vch; AFFECT_DATA af; act( "{cAs dew leaves the cobweb lightly{x", ch, NULL, NULL, TO_ALL ); act( "{cThreaded with stars,{x", ch, NULL, NULL, TO_ALL ); act( "{cScattering jewels on the fence{x", ch, NULL, NULL, TO_ALL ); act( "{cAnd the pasture bars;{x", ch, NULL, NULL, TO_ALL ); act( "{cSet every common sight{x", ch, NULL, NULL, TO_ALL ); act( "{cOf flesh or stone{x", ch, NULL, NULL, TO_ALL ); act( "{cDelicately alight{x", ch, NULL, NULL, TO_ALL ); act( "{cFor me alone.{x", ch, NULL, NULL, TO_ALL ); check_improve(ch,gsn_songsmith,TRUE,6); init_affect(&af); af.where = TO_AFFECTS; af.aftype = AFT_SONG; af.type = gsn_dew; af.level = level; af.duration = 4 + (level/8); af.bitvector = 0; af.modifier = 0; for ( vch = ch->in_room->people; vch != NULL; vch = vch->next_in_room ) { if (vch->invis_level > 0) continue; if (is_same_cabal(vch,ch)) continue; if (is_same_group(vch,ch)) continue; if (vch->invis_level > 51 ) continue; if (vch == ch) continue; if (vch == ch || saves_spell( level, vch, DAM_OTHER)) //act("The dew evaporates before affecting $N.",ch,NULL,vch,TO_CHAR); //act("The dew dries before revealing your location.",ch,NULL,vch, TO_VICT); //act("Dew forms within the air, but simply evaporates.",ch,NULL,vch,TO_NOTVICT); return; affect_to_char( vch,&af); affect_strip ( vch,gsn_camouflage ); affect_strip ( vch, gsn_invis ); affect_strip ( vch, gsn_mass_invis ); affect_strip ( vch, gsn_sneak ); un_earthfade ( vch, NULL ); REMOVE_BIT ( vch->affected_by, AFF_HIDE ); REMOVE_BIT ( vch->affected_by, AFF_INVISIBLE ); REMOVE_BIT ( vch->affected_by, AFF_SNEAK ); act( "$n is revealed!", vch, NULL, NULL, TO_ROOM ); send_to_char( "You are revealed!\n\r", vch ); //send_to_char( "Beads of water form on your body.\n\r",vch ); //act( "$n is revealed by drops of dew.", vch, NULL, NULL, TO_ROOM ); //affect_to_char(vch, &af); } return; } void spell_deafening_pitch(int sn, int level, CHAR_DATA *ch, void *vo, int target) { CHAR_DATA *vch=0; CHAR_DATA *vch_next; AFFECT_DATA af; init_affect(&af); af.where = TO_AFFECTS; af.type = skill_lookup("deafen"); af.level = level; af.duration = 4; af.aftype=AFT_SONG; af.location = APPLY_NONE; af.modifier = 0; af.bitvector = 0; act("{mNow, my people, my time is nigh,{x",ch,NULL,NULL,TO_ALL); act("{mWhen to bed I must go, for eight hours to lie.{x",ch,NULL,NULL,TO_ALL); act("{mI must twist like a lizard into my own dreams,{x",ch,NULL,NULL,TO_ALL); act("{mAnd you'll know that I'm dreaming by my deafening screams;{x",ch,NULL,NULL,TO_ALL); act("{mYou'll know that I'm sleeping by the sweat pouring down my face,{x",ch,NULL,NULL,TO_ALL); act("{mAnd I'll dissolve in the night, disappearing without trace.{x",ch,NULL,NULL,TO_ALL); WAIT_STATE(ch, 1 * PULSE_VIOLENCE); check_improve(ch,gsn_songsmith,TRUE,6); for (vch = ch->in_room->people; vch != NULL; vch = vch_next) { vch_next = vch->next_in_room; if (is_same_group(vch,ch)) continue; if (is_safe(ch,vch)) continue; if (is_affected(vch,gsn_deafen)) continue; if (is_same_cabal(vch,ch)) continue; if (ch->fighting != NULL) { send_to_char( "You cannot find the opportunity to sing this song in the midst of combat.\n\r", vch ); } { if (!saves_spell(level,vch,DAM_OTHER)) { act( "Hands to the sky, $n lets out the highest note they can possibly manage.\n\r", vch,NULL,NULL, TO_VICT ); act( "$n screams in agony and clutches their ears.", vch, NULL, NULL, TO_ROOM ); affect_to_char(vch, &af); } else { act("$n covers his ears just in time to avoid the effects of your song.\n\r",vch,NULL,NULL,TO_CHAR); act("You cover your ears and $n's song does not affect you.\n\r",ch,NULL,vch, TO_VICT); act("$N covers his ears just in time to avoid the effects of $n's song.\n\r",vch,NULL,ch,TO_NOTVICT); } } } return; } void spell_healing(int sn, int level, CHAR_DATA *ch, void *vo, int target) { CHAR_DATA *vch=0; act("{yA barrier breached{x",ch,NULL,NULL,TO_ALL); act("{yDestined harmony disrupted{x",ch,NULL,NULL,TO_ALL); act("{yOnce companions{x",ch,NULL,NULL,TO_ALL); act("{yTurn to that which made them one{x",ch,NULL,NULL,TO_ALL); act("{yTo make the body whole again{x",ch,NULL,NULL,TO_ALL); WAIT_STATE(ch,PULSE_VIOLENCE); check_improve(ch,gsn_songsmith,TRUE,6); for ( vch = ch->in_room->people; vch != NULL; vch = vch->next_in_room) { if (is_safe(ch,vch)) continue; if (!is_same_group(vch,ch) && !is_same_cabal(vch,ch)) continue; if (!IS_NPC(vch)) { vch->hit = UMIN( vch->hit + 100, vch->max_hit ); act("$n's cheeks flush as his wounds heal.",vch,NULL,NULL,TO_ROOM); send_to_char("Your face feels warm as your wounds heal.\n\r", vch); } } return; } void spell_balmy_sleep(int sn, int level, CHAR_DATA *ch, void *vo, int target) { CHAR_DATA *vch=0; CHAR_DATA *vch_next; AFFECT_DATA af; /* act("{bSleep, balmy sleep, has closed the eyes of all{x",ch,NULL,NULL,TO_ALL); act("{bBut me! ah me! no respite can I gain;{x",ch,NULL,NULL,TO_ALL); act("{bTho' darkness reigns o're the terrestrial ball,{x",ch,NULL,NULL,TO_ALL); act("{bNot one soft slumber cheats this vital pain.{x",ch,NULL,NULL,TO_ALL); */ init_affect(&af); af.where = TO_AFFECTS; af.type = skill_lookup("sleep"); af.aftype = AFT_SONG; af.level = level; af.duration = 5; af.aftype=AFT_SONG; af.location = APPLY_NONE; af.modifier = 0; af.bitvector = AFF_SLEEP; act("{bSleep, balmy sleep, has closed the eyes of all{x",ch,NULL,NULL,TO_ALL); act("{bBut me! ah me! no respite can I gain;{x",ch,NULL,NULL,TO_ALL); act("{bTho' darkness reigns o're the terrestrial ball,{x",ch,NULL,NULL,TO_ALL); act("{bNot one soft slumber cheats this vital pain.{x",ch,NULL,NULL,TO_ALL); WAIT_STATE(ch,PULSE_VIOLENCE*1); check_improve(ch,gsn_songsmith,TRUE,6); for (vch = ch->in_room->people; vch != NULL; vch = vch_next) { vch_next = vch->next_in_room; if (is_same_group(vch,ch)) continue; if (is_safe(ch,vch)) continue; if (is_same_cabal(vch,ch)) continue; if (is_affected(vch,gsn_sleep)) continue; if (vch->invis_level > 51 ) continue; if (ch->fighting != NULL) { send_to_char( "You are too out of breath for that song.\n\r", vch ); } if ( IS_AWAKE(vch)) { if (!saves_spell(level,vch,DAM_OTHER)) { send_to_char( "You feel yourself falling asleep.\n\r", vch ); act( "$n goes to sleep.", vch, NULL, NULL, TO_ROOM ); vch->position = POS_SLEEPING; affect_to_char(vch, &af); } else { act("$n resists your songs affects.\n\r",vch,NULL,NULL,TO_CHAR); act("You resist the affects of $n's song.\n\r",ch,NULL,NULL, TO_VICT); act("$n resists the affects of $n's song.\n\r",vch,NULL,ch,TO_NOTVICT); } } } return; } void spell_storms(int sn, int level, CHAR_DATA *ch, void *vo, int target) { CHAR_DATA *vch; CHAR_DATA *vch_next; int dam; int check; AFFECT_DATA af; init_affect(&af); af.where = TO_AFFECTS; af.location = APPLY_HITROLL; af.modifier = -3; af.duration = 3; af.aftype=AFT_SONG; af.level = level; af.type = skill_lookup ("windwall"); af.bitvector = AFF_BLIND; act("{CThe four winds of earth, the North, South, East, and West,{x",ch,NULL,NULL,TO_ALL); act("{CShrieked and groaned, sobbed and wailed, like the soul of unrest.{x",ch,NULL,NULL,TO_ALL); act("{CI stood in the dusk of the twilight alone,{x",ch,NULL,NULL,TO_ALL); act("{CAnd heard them go by with a terrible moan.{x",ch,NULL,NULL,TO_ALL); act("{C'What is it, O winds! that is grieving you so?{x",ch,NULL,NULL,TO_ALL); act("{CCome tell me your sorrow, and tell me your woe!'{x",ch,NULL,NULL,TO_ALL); act("{C'What is it?' I questioned. They shuddered, and said:{x",ch,NULL,NULL,TO_ALL); act("{C'We mourn for the dead! Oh! we mourn for the dead-- {x",ch,NULL,NULL,TO_ALL); send_to_char("Your song raises strong winds to strike your foes!\n\r",ch); act("$n song raises terrible winds all around you!",ch,NULL,NULL,TO_ROOM); WAIT_STATE(ch, 2 * PULSE_VIOLENCE); check_improve(ch,gsn_songsmith,TRUE,6); dam = dice(level, 6); for (vch = ch->in_room->people; vch != NULL; vch = vch_next) { vch_next = vch->next_in_room; if (is_same_group(vch,ch)) continue; if (vch->invis_level > 51 ) continue; if (is_safe(ch,vch)) continue; if (IS_NPC(vch)) { if (ch->cabal == CABAL_EMPIRE && vch->pIndexData->vnum == MOB_VNUM_CENTURION) continue; } if (is_same_cabal(vch,ch)) continue; /* if (check_songsmith(ch,sn)) dam = songsmith_dam(level,13); else dam = dice(level/3,6); */ if (check_songsmith(ch,sn)) dam = songsmith_dam(level*3,4); else dam = dice(level*1.75,4); check = skill_lookup ("windwall"); // To stop windwall stacking. if ((number_range(0,1) == 0) && !saves_spell(level,vch,DAM_BASH) && !is_affected(vch, check)) { act("$n appears blinded by the debris.",vch,NULL,NULL,TO_ROOM); affect_to_char(vch,&af); } damage_old(ch,vch,dam,skill_lookup("windwall"),DAM_BASH,TRUE); if (number_percent()>50) { act("$n is thrown wildly to the ground by force of the winds!",vch,NULL,NULL,TO_ROOM); send_to_char("You are thrown down by the strong winds!\n\r",vch); affect_strip(vch,skill_lookup("fly")); WAIT_STATE(vch, 1 * PULSE_VIOLENCE); } } return; } void spell_titans(int sn, int level, CHAR_DATA *ch, void *vo, int target) { CHAR_DATA *vch; AFFECT_DATA af1, af2; init_affect(&af1); af1.where = TO_AFFECTS; af1.type = skill_lookup("berserk"); af1.level = level; af1.aftype=AFT_SONG; af1.duration = level/2; af1.location = APPLY_DAMROLL; af1.modifier = level/8; af1.bitvector = 0; init_affect(&af2); af2.where = TO_AFFECTS; af2.type = skill_lookup("warcry"); af2.level = level; af2.aftype=AFT_SONG; af2.duration = level/2; af2.location = APPLY_SAVES; af2.modifier = -7; af2.bitvector = 0; act("{RBlack, formless, without substance, motionless.{x",ch,NULL,NULL,TO_ALL); act("{RThe flaming tumult of disastrous fight,{x",ch,NULL,NULL,TO_ALL); act("{RTalking their outward fire, had left them bleak{x",ch,NULL,NULL,TO_ALL); act("{RAs their own statues, who yet ached within.{x",ch,NULL,NULL,TO_ALL); act("{RAnd battle-splendours gloomed with rust were strewn{x",ch,NULL,NULL,TO_ALL); act("{RAround them, where the darkness heeded not{x",ch,NULL,NULL,TO_ALL); check_improve(ch,gsn_songsmith,TRUE,6); if (!is_affected( ch, af1.type )) { act("$n is filled with fury.",ch,NULL,NULL,TO_ROOM); send_to_char("You are filled with fury.\n\r", ch); affect_to_char(ch,&af1); } if (!is_affected( ch, af2.type )) { act("$n is suddenly overcome by the cry of battle!",ch,NULL,NULL,TO_ROOM); send_to_char("You are suddenly overcome by the cry of battle!\n\r", ch); affect_to_char(ch,&af2); } for ( vch = ch->in_room->people; vch != NULL; vch = vch->next_in_room) { if (ch == vch) continue; if (!is_same_group(vch,ch) && !is_same_cabal(vch,ch)) continue; if (!IS_NPC(vch)) { if (number_percent() <= 80 && !is_affected( vch, af1.type )) { act("$n is filled with fury.\n\r",vch,NULL,NULL,TO_ROOM); send_to_char("You are filled with fury.\n\r", vch); affect_to_char( vch, &af1 ); } if (number_percent() <= 80 && !is_affected( vch, af2.type )) { act("$n is overcome by the cry of battle.\n\r",vch,NULL,NULL,TO_ROOM); send_to_char("You are suddenly overcome by the cry of battle!\n\r", vch); affect_to_char( vch, &af2 ); } } } return; } void spell_guarding(int sn, int level, CHAR_DATA *ch, void *vo, int target) { CHAR_DATA *vch; AFFECT_DATA af1, af2; init_affect(&af1); af1.where = TO_AFFECTS; af1.type = skill_lookup("stone skin"); af1.level = level; af1.aftype=AFT_SONG; af1.duration = level/2; af1.location = APPLY_AC; af1.modifier = -40; af1.bitvector = 0; init_affect(&af2); af2.where = TO_AFFECTS; af2.type = skill_lookup("armor"); af2.level = level; af2.aftype=AFT_SONG; af2.duration = level/2; af2.location = APPLY_AC; af2.modifier = -20; af2.bitvector = 0; act("{WEntering the castle,{x",ch,NULL,NULL,TO_ALL); act("{WAnd danced the skies on laughter-silvered wings;{x",ch,NULL,NULL,TO_ALL); act("{Wice crystals safe from dawn,{x",ch,NULL,NULL,TO_ALL); act("{WI am drawn to the cold,{x",ch,NULL,NULL,TO_ALL); act("{WYour warmth is my knight,{x",ch,NULL,NULL,TO_ALL); act("{Wflames on ice ablaze,{x",ch,NULL,NULL,TO_ALL); act("{WOn to the valley, bright with kings,{x",ch,NULL,NULL,TO_ALL); act("{WPast the copper statues,{x",ch,NULL,NULL,TO_ALL); act("{Wruby angels, golden wings.{x",ch,NULL,NULL,TO_ALL); check_improve(ch,gsn_songsmith,TRUE,6); if (!is_affected( ch, af1.type )) { act("$n looks as solid as a rock.",ch,NULL,NULL,TO_ROOM); send_to_char("You feel your skin harden like stone.\n\r", ch); affect_to_char(ch,&af1); } if (!is_affected( ch, af2.type )) { act("$n is suddenly surrounded by a glowing suit of armor.",ch,NULL,NULL,TO_ROOM); send_to_char("You are suddenly surrounded by a glowing suit of armor.\n\r", ch); affect_to_char(ch,&af2); } for ( vch = ch->in_room->people; vch != NULL; vch = vch->next_in_room) { if (ch == vch) continue; if (!is_same_group(vch,ch) && !is_same_cabal(vch,ch)) continue; if (!IS_NPC(vch)) { if (number_percent() <= 80 && !is_affected( vch, af1.type )) { act("$n glows briefly.",vch,NULL,NULL,TO_ROOM); send_to_char("You glow briefly.\n\r", vch); affect_to_char( vch, &af1 ); } if (number_percent() <= 80 && !is_affected( vch, af2.type )) { act("$n is suddenly surrounded by a glowing suit of armor.",vch,NULL,NULL,TO_ROOM); send_to_char("You are suddenly surrounded by a glowing suit of armor.\n\r", vch); affect_to_char( vch, &af2 ); } } } return; } void spell_insanity(int sn, int level, CHAR_DATA *ch, void *vo, int target) { CHAR_DATA *vch; AFFECT_DATA af; if (IS_AFFECTED(ch,AFF_LOOKING_GLASS)) return; init_affect(&af); af.where = TO_AFFECTS; af.type = skill_lookup("looking glass"); af.aftype=AFT_SONG; af.level = level; af.duration = 3; af.location = 0; af.modifier = 0; af.bitvector = AFF_LOOKING_GLASS; act("{MIt clouds my mind{x",ch,NULL,NULL,TO_ALL); act("{MAnd still provokes thought.{x",ch,NULL,NULL,TO_ALL); act("{MTwisted images are smote and wrought.{x",ch,NULL,NULL,TO_ALL); act("{MThe voice in my head leads me on.{x",ch,NULL,NULL,TO_ALL); act("{MI can not find a pattern that.s smooth.{x",ch,NULL,NULL,TO_ALL); act("{MI bump down a rugged hill.{x",ch,NULL,NULL,TO_ALL); act("{MThey say you need help,{x",ch,NULL,NULL,TO_ALL); act("{MIn all honesty you know your quite pleased.{x",ch,NULL,NULL,TO_ALL); check_improve(ch,gsn_songsmith,TRUE,6); WAIT_STATE(ch,PULSE_VIOLENCE*3); for ( vch = ch->in_room->people; vch != NULL; vch = vch->next_in_room) { if (ch == vch) continue; if (is_safe(ch,vch)) continue; if (is_same_group(vch,ch)) continue; if (is_same_cabal(vch,ch)) continue; if (saves_spell(level,vch,DAM_OTHER)) continue; if (!IS_NPC(vch)) { if (number_percent() <= 80 && !is_affected( vch, af.type )) { act("$n's eyes open wide in bewilderment.",vch,NULL,NULL,TO_ROOM); send_to_char("You feel yourself losing touch with reality.\n\r", vch); affect_to_char( vch, &af ); } } } return; } void spell_chilliness_of_death(int sn, int level, CHAR_DATA *ch, void *vo, int target) { CHAR_DATA *vch; AFFECT_DATA af; init_affect(&af); af.where = TO_AFFECTS; af.type = skill_lookup("weaken"); af.aftype=AFT_SONG; af.level = level; af.duration = level/2; af.location = APPLY_STR; af.modifier = -10; af.bitvector = 0; act("{ythe chilyness of death{x",ch,NULL,NULL,TO_ALL); act("{ytouched me playfull,{x",ch,NULL,NULL,TO_ALL); act("{ythoughtless {x",ch,NULL,NULL,TO_ALL); act("{yjust passing by {x",ch,NULL,NULL,TO_ALL); act("{yjust then you feel{x",ch,NULL,NULL,TO_ALL); act("{yhow weak a man is{x",ch,NULL,NULL,TO_ALL); act("{ynot very firm not{x",ch,NULL,NULL,TO_ALL); act("{yvery prepared{x",ch,NULL,NULL,TO_ALL); check_improve(ch,gsn_songsmith,TRUE,6); for ( vch = ch->in_room->people; vch != NULL; vch = vch->next_in_room) { if (ch == vch) continue; if (is_safe(ch,vch)) continue; if (is_same_group(vch,ch)) continue; if (is_same_cabal(vch,ch)) continue; if (vch->invis_level > 51 ) continue; if (ch != vch) { if (number_percent() <= 70 && !is_affected( vch, af.type )) { act("$n's shoulders slump as the strength is drained from them.",vch,NULL,NULL,TO_ROOM); send_to_char("You feel your strength diminish.\n\r", vch); affect_to_char( vch, &af ); } } } return; } void spell_resting(int sn, int level, CHAR_DATA *ch, void *vo, int target) { CHAR_DATA *vch=0; act("{YArise, awake, the soaring flight of a bird over green meadows of fragrant flowers bloomin{x",ch,NULL,NULL,TO_ALL); act("{Ynodding in the gentle mist of a cool shower, a beginning, an awakening, oh how glorious{x",ch,NULL,NULL,TO_ALL); act("{Yagain, bitten and again reborn, painting the birth of rejuvination.{x",ch,NULL,NULL,TO_ALL); check_improve(ch,gsn_songsmith,TRUE,6); for ( vch = ch->in_room->people; vch != NULL; vch = vch->next_in_room) { if (is_safe(ch,vch)) continue; if (!is_same_group(vch,ch) && !is_same_cabal(vch,ch)) continue; if (!IS_NPC(vch)) { vch->mana = UMIN( vch->mana + 75, vch->max_mana ); act("$n breaths deeply as his mind is rejuvinated.",vch,NULL,NULL,TO_ROOM); send_to_char("You breath deeply as your mind is rejuvinated.\n\r", vch); } } return; } void spell_armageddon(int sn,int level,CHAR_DATA *ch,void *vo,int target) { CHAR_DATA *vch=0; int dam, sn_frost, sn_fire, d_type, sn_type; sn_frost = skill_lookup("firestream"); sn_fire = skill_lookup("iceball"); act("{BWithout sun's warmth will come the cold,{x",ch,NULL,NULL,TO_ALL); act("{BSo frigid will be arctic blast;{x",ch,NULL,NULL,TO_ALL); act("{BAll plants will die before they're old,{x",ch,NULL,NULL,TO_ALL); act("{BEach species dies with man the last.{x",ch,NULL,NULL,TO_ALL); act("{RA ball of fire may hit our lands,{x",ch,NULL,NULL,TO_ALL); act("{ROr might in fact destroy our sun;{x",ch,NULL,NULL,TO_ALL); act("{RAll is out of control, out of our hands{x",ch,NULL,NULL,TO_ALL); act("{RNo shelter man can find to run.{x",ch,NULL,NULL,TO_ALL); check_improve(ch,gsn_songsmith,TRUE,6); WAIT_STATE(ch,PULSE_VIOLENCE*3); for ( vch = ch->in_room->people; vch != NULL; vch = vch->next_in_room) { if (is_safe(ch,vch)) continue; if (is_same_group(vch,ch)) continue; if (is_same_cabal(vch,ch)) continue; if(IS_NPC(vch)) { if (ch->cabal == CABAL_EMPIRE && vch->pIndexData->vnum == MOB_VNUM_CENTURION) continue; } if (ch == vch) continue; if (vch->invis_level > 51 ) continue; if (number_percent() > 50) { sn_type = sn_frost; d_type = DAM_COLD; } else { sn_type = sn_fire; d_type = DAM_FIRE; } if (check_songsmith(ch,sn)) dam = songsmith_dam(level*3,4); else dam = dice(level*1.75,4); if(!IS_NPC(ch)) dam/=1.5; damage_old(ch,vch,dam,sn_type,d_type,TRUE); if (check_songsmith(ch,sn)) dam = songsmith_dam(level*3,4); else dam = dice(level*1.75, 4); if (d_type == DAM_COLD) { d_type = DAM_FIRE; sn_type = sn_fire; } else { d_type = DAM_COLD; sn_type = sn_frost; } if(!IS_NPC(ch)) dam/=3; damage_old(ch,vch,dam,sn_type,d_type,TRUE); } return; } void spell_hour_of_rising(int sn,int level,CHAR_DATA *ch,void *vo,int target) { CHAR_DATA *vch=0; act("{gSomnolent waves of{x",ch,NULL,NULL,TO_ALL); act("{gshifting consciousness,{x",ch,NULL,NULL,TO_ALL); act("{gintangible images{x",ch,NULL,NULL,TO_ALL); act("{gintertwine with substance.{x",ch,NULL,NULL,TO_ALL); act("{gTime creeps in,{x",ch,NULL,NULL,TO_ALL); act("{gtenacious reminder{x",ch,NULL,NULL,TO_ALL); act("{gas seductive sleep{x",ch,NULL,NULL,TO_ALL); act("{ggradually dissolves.{x",ch,NULL,NULL,TO_ALL); act("{gThe day begins.{x",ch,NULL,NULL,TO_ALL); check_improve(ch,gsn_songsmith,TRUE,6); for ( vch = ch->in_room->people; vch != NULL; vch = vch->next_in_room) { if (is_safe(ch,vch)) continue; if (vch == ch) continue; if (IS_AWAKE(vch)) { act("$N is already awake.", ch, NULL, vch, TO_CHAR); continue; } if (is_affected(vch,skill_lookup("sleep"))) { if (check_dispel(level,vch,skill_lookup("sleep"))) { send_to_char( "You suddenly awaken.\n\r", vch ); act("$n suddenly awakens.",vch,NULL,NULL,TO_ROOM); do_stand(vch,""); } else { send_to_char("You failed to awaken them.\n\r",ch); } return; } else if (is_affected(vch,gsn_strangle)) { if (check_dispel(level,vch,gsn_strangle)) { send_to_char( "You suddenly awaken.\n\r", vch ); act("$n suddenly awakens.",vch,NULL,NULL,TO_ROOM); do_stand(vch,""); } else { send_to_char("You failed to awaken them.\n\r",ch); } return; } else if (is_affected(vch,gsn_blackjack)) { if (check_dispel(level,vch,gsn_blackjack)) { send_to_char( "You suddenly awaken.\n\r", vch ); act("$n suddenly awakens.",vch,NULL,NULL,TO_ROOM); do_stand(vch,""); } else { send_to_char("You failed to awaken them.\n\r",ch); } return; } else if (is_affected(vch,gsn_choke)) { if (check_dispel(level,vch,gsn_choke)) { send_to_char( "You suddenly awaken.\n\r", vch ); act("$n suddenly awakens.",vch,NULL,NULL,TO_ROOM); do_stand(vch,""); } else { send_to_char("You failed to awaken them.\n\r",ch); } return; } else if (is_affected(vch,gsn_choke)) { if (check_dispel(level,vch,gsn_choke)) { send_to_char( "You suddenly awaken.\n\r", vch ); act("$n suddenly awakens.",vch,NULL,NULL,TO_ROOM); do_stand(vch,""); } else { send_to_char("You failed to awaken them.\n\r",ch); } return; } else if (is_affected(vch,gsn_stun)) { if (check_dispel(level,vch,gsn_stun)) { send_to_char( "You suddenly awaken.\n\r", vch ); act("$n suddenly awakens.",vch,NULL,NULL,TO_ROOM); do_stand(vch,""); } else { send_to_char("You failed to awaken them.\n\r",ch); } return; } else { send_to_char("They don't seem to be in deep sleep.\n\r",ch); return; } } return; } void spell_stonelike_resolve(int sn, int level, CHAR_DATA *ch, void *vo, int target) { CHAR_DATA *vch; AFFECT_DATA af; act( "{cNow standing stiffly,{x", ch, NULL, NULL, TO_ALL ); act( "{cRigidly,{x", ch, NULL, NULL, TO_ALL ); act( "{cSnow capped head{x", ch, NULL, NULL, TO_ALL ); act( "{cHonoring cruel combat.s dead{x", ch, NULL, NULL, TO_ALL ); act( "{cRising hoary{x", ch, NULL, NULL, TO_ALL ); act( "{cTall above silvery cloud,{x", ch, NULL, NULL, TO_ALL ); act( "{cHeaven's bright shroud.{x", ch, NULL, NULL, TO_ALL ); check_improve(ch,gsn_songsmith,TRUE,6); init_affect(&af); af.where = TO_AFFECTS; af.aftype = AFT_SONG; af.type = gsn_body_of_stone; af.level = level; af.duration = 4 + (level/8); af.bitvector = 0; af.modifier = 0; for ( vch = ch->in_room->people; vch != NULL; vch = vch->next_in_room ) { if (vch->invis_level > 51 ) continue; if (is_affected(vch,gsn_body_of_stone)) continue; if (!is_same_group(vch,ch) && !is_same_cabal(vch,ch)) continue; act("$n's jaw tightens with new resolve.",vch,NULL,NULL,TO_ROOM); send_to_char("Your jaw tightens with new resolve.\n\r", vch); affect_to_char( vch, &af ); } return; } void spell_phantom(int sn, int level, CHAR_DATA *ch, void *vo, int target) { CHAR_DATA *phantom, *victim; AFFECT_DATA af; int i, dam; if (is_affected(ch,sn)) { send_to_char("You cannot create an illusion again so soon.\n\r", ch); return; } act( "{WBone white mask {x", ch, NULL, NULL, TO_ALL ); act( "{WMy black cloak {x", ch, NULL, NULL, TO_ALL ); act( "{WI'll wait around forever {x", ch, NULL, NULL, TO_ALL ); act( "{WBut until then,{x", ch, NULL, NULL, TO_ALL ); act( "{WI am merely a dream {x", ch, NULL, NULL, TO_ALL ); act( "{WA show {x", ch, NULL, NULL, TO_ALL ); act( "{WA Phantom, {x", ch, NULL, NULL, TO_ALL ); act( "{WFading away into the night.{x", ch, NULL, NULL, TO_ALL ); WAIT_STATE(ch,PULSE_VIOLENCE*3); send_to_char("You attempt to summon a phantom.\n\r",ch); act("$n attempts to summon a phantom.",ch,NULL,NULL,TO_ROOM); check_improve(ch,gsn_songsmith,TRUE,6); for ( victim = ch->in_room->people; victim != NULL; victim = victim->next_in_room) { if (victim == ch || victim->in_room == NULL || IS_NPC(victim)) continue; if (saves_spell(level,victim,DAM_OTHER)) continue; if (is_safe(ch,victim)) continue; if (is_same_group(victim,ch)) continue; if (is_same_cabal(victim,ch)) continue; if (victim->invis_level > 51 ) continue; phantom = create_mobile(get_mob_index(MOB_VNUM_PHANTOM)); init_affect(&af); af.aftype = AFT_SONG; af.where = TO_AFFECTS; af.type = sn; af.level = level; af.duration = 15; af.bitvector = 0; af.modifier = 0; af.location = APPLY_NONE; affect_to_char(ch, &af); for (i=0;i < MAX_STATS; i++) { phantom->perm_stat[i] = victim->perm_stat[i]; } dam *= .3; phantom->max_hit = UMIN(20000,victim->max_hit); phantom->hit = victim->max_hit; phantom->max_mana = victim->max_mana; phantom->mana = victim->max_mana; phantom->level = victim->level; phantom->damroll = victim->level*1.5; phantom->hitroll = victim->level*1.5; phantom->invis_level = 52; phantom->damage[DICE_NUMBER] = number_range(victim->level/10, victim->level/10); phantom->damage[DICE_TYPE] = number_range(victim->level/4, victim->level/3); phantom->damage[DICE_BONUS] = number_range(victim->level/10, victim->level/9); for (i=0; i < 3; i++) phantom->armor[i] = interpolate(phantom->level,100,-100); phantom->armor[3] = interpolate(phantom->level,100,0); phantom->gold = 0; phantom->level = 52; SET_BIT(phantom->act,PLR_HOLYLIGHT); char_to_room(phantom,victim->in_room); phantom->last_fought = victim; send_to_char("An invisible phantom arrives to torment you!\n\r",victim); act("An invisible phantom arrives to torment $n!\n\r",victim,NULL,NULL,TO_ROOM); send_to_char("You have created a phantom in the mind of your enemy!\n\r", ch); do_murder(phantom,victim->name); } return; } void spell_divine_blessing(int sn, int level, CHAR_DATA *ch, void *vo, int target) { AFFECT_DATA af; sn = skill_lookup("bless"); if (is_affected(ch, sn)) { send_to_char("You already have a divine blessing.\n\r",ch); return; } act( "{cOh lords above,{x", ch, NULL, NULL, TO_ALL ); act( "{cHear my beckon,{x", ch, NULL, NULL, TO_ALL ); act( "{cI request aid,{x", ch, NULL, NULL, TO_ALL ); act( "{cFor the crusade,{x", ch, NULL, NULL, TO_ALL ); act( "{cThat life has given,{x", ch, NULL, NULL, TO_ALL ); act( "{cI call to ye, Lords!{x", ch, NULL, NULL, TO_ALL ); act( "{cGrant me a divine blessing!{x", ch, NULL, NULL, TO_ALL ); check_improve(ch,gsn_songsmith,TRUE,6); init_affect(&af); af.aftype = AFT_SONG; af.where = TO_AFFECTS; af.type = skill_lookup("bless"); af.level = level; af.duration = 6+level; af.location = APPLY_HITROLL; af.modifier = 10; af.bitvector = 0; affect_to_char( ch, &af ); af.location = APPLY_SAVING_SPELL; af.modifier = -10; affect_to_char( ch, &af ); act("$n smiles as the divine answers the beckon.\n\r",ch,NULL,NULL,TO_ROOM); send_to_char("The lords have answered your beckon.\n\r", ch); return; }