#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" /* Kline-style Jedi! WOOOT! */ /*** BEGIN UTILITY FUNCTIONS ***/ void jedi_force_upkeep( CHAR_DATA *ch ) { int i; int cost = 0; if( ch == NULL ) return; if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_ABSORB) ) for( i = 0; i < GET_POWERS(ch,JEDI_FORCE_ABSORB); i++ ) cost += 3; if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_SHIELD) ) for( i = 0; i < GET_POWERS(ch,JEDI_FORCE_SHIELD); i++ ) cost += 3; if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_MIND_TRICK) ) for( i = 0; i < GET_POWERS(ch,JEDI_FORCE_MIND_TRICK); i++ ) cost += 3; if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_SIGHT) ) for( i = 0; i < GET_POWERS(ch,JEDI_FORCE_SIGHT); i++ ) cost += 3; if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_RAGE) ) for( i = 0; i < GET_POWERS(ch,JEDI_FORCE_RAGE); i++ ) cost += 5; if( GET_POWERS(ch,JEDI_FORCE_POOL) < cost ) { if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_ABSORB) ) REM_BIT_POWERS(ch,JEDI_BITS,JEDI_ABSORB); if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_SHIELD) ) REM_BIT_POWERS(ch,JEDI_BITS,JEDI_SHIELD); if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_MIND_TRICK) ) REM_BIT_POWERS(ch,JEDI_BITS,JEDI_MIND_TRICK); if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_SIGHT) ) REM_BIT_POWERS(ch,JEDI_BITS,JEDI_SIGHT); if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_RAGE) ) REM_BIT_POWERS(ch,JEDI_BITS,JEDI_RAGE); stc("Your force powers dissipated.\n\r",ch); } else GET_POWERS(ch,JEDI_FORCE_POOL) -= cost; return; } int snarf_jedi_total_force( CHAR_DATA *ch ) { if( ch == NULL ) return; return ( GET_POWERS(ch,JEDI_FORCE_HEAL) + GET_POWERS(ch,JEDI_FORCE_ABSORB) + GET_POWERS(ch,JEDI_FORCE_SHIELD) + GET_POWERS(ch,JEDI_FORCE_MIND_TRICK) + GET_POWERS(ch,JEDI_FORCE_SIGHT) + GET_POWERS(ch,JEDI_FORCE_SPEED) + GET_POWERS(ch,JEDI_FORCE_JUMP) + GET_POWERS(ch,JEDI_FORCE_PUSH) + GET_POWERS(ch,JEDI_FORCE_PULL) + GET_POWERS(ch,JEDI_FORCE_GRIP) + GET_POWERS(ch,JEDI_FORCE_RAGE) + GET_POWERS(ch,JEDI_FORCE_DRAIN) + GET_POWERS(ch,JEDI_FORCE_LIGHTNING) ); } int snarf_jedi_combo_dam( CHAR_DATA *ch, int dam ) { switch( GET_POWERS(ch,JEDI_COMBO_OLD) ) { case JEDI_COMBO_NONE: break; case JEDI_COMBO_JOVER: switch( GET_POWERS(ch,JEDI_COMBO_NEW) ) { case JEDI_COMBO_NONE: break; case JEDI_COMBO_JOVER: dam *= 0.50; break; case JEDI_COMBO_JFLIP: dam *= 1.10; break; case JEDI_COMBO_JUPPER: dam *= 0.75; break; case JEDI_COMBO_JBACK: dam *= 1.50; break; case JEDI_COMBO_JSLICE: dam *= 0.75; break; case JEDI_COMBO_JSWIPE: dam *= 1.20; break; case JEDI_COMBO_JSLASH: dam *= 1.30; break; case JEDI_COMBO_JROLL: dam *= 1.40; break; } break; case JEDI_COMBO_JFLIP: switch( GET_POWERS(ch,JEDI_COMBO_NEW) ) { case JEDI_COMBO_NONE: break; case JEDI_COMBO_JOVER: dam *= 1.10; break; case JEDI_COMBO_JFLIP: dam *= 0.50; break; case JEDI_COMBO_JUPPER: dam *= 0.75; break; case JEDI_COMBO_JBACK: dam *= 1.50; break; case JEDI_COMBO_JSLICE: dam *= 0.75; break; case JEDI_COMBO_JSWIPE: dam *= 1.20; break; case JEDI_COMBO_JSLASH: dam *= 1.30; break; case JEDI_COMBO_JROLL: dam *= 1.40; break; } break; case JEDI_COMBO_JUPPER: switch( GET_POWERS(ch,JEDI_COMBO_NEW) ) { case JEDI_COMBO_NONE: break; case JEDI_COMBO_JOVER: dam *= 1.40; break; case JEDI_COMBO_JFLIP: dam *= 1.30; break; case JEDI_COMBO_JUPPER: dam *= 0.50; break; case JEDI_COMBO_JBACK: dam *= 0.75; break; case JEDI_COMBO_JSLICE: dam *= 1.50; break; case JEDI_COMBO_JSWIPE: dam *= 1.20; break; case JEDI_COMBO_JSLASH: dam *= 0.75; break; case JEDI_COMBO_JROLL: dam *= 1.10; break; } break; case JEDI_COMBO_JBACK: switch( GET_POWERS(ch,JEDI_COMBO_NEW) ) { case JEDI_COMBO_NONE: break; case JEDI_COMBO_JOVER: dam *= 0.75; break; case JEDI_COMBO_JFLIP: dam *= 1.30; break; case JEDI_COMBO_JUPPER: dam *= 0.75; break; case JEDI_COMBO_JBACK: dam *= 0.50; break; case JEDI_COMBO_JSLICE: dam *= 0.75; break; case JEDI_COMBO_JSWIPE: dam *= 1.10; break; case JEDI_COMBO_JSLASH: dam *= 1.40; break; case JEDI_COMBO_JROLL: dam *= 1.50; break; } break; case JEDI_COMBO_JSLICE: switch( GET_POWERS(ch,JEDI_COMBO_NEW) ) { case JEDI_COMBO_NONE: break; case JEDI_COMBO_JOVER: dam *= 1.30; break; case JEDI_COMBO_JFLIP: dam *= 1.40; break; case JEDI_COMBO_JUPPER: dam *= 1.10; break; case JEDI_COMBO_JBACK: dam *= 0.75; break; case JEDI_COMBO_JSLICE: dam *= 0.50; break; case JEDI_COMBO_JSWIPE: dam *= 1.50; break; case JEDI_COMBO_JSLASH: dam *= 1.20; break; case JEDI_COMBO_JROLL: dam *= 0.75; break; } break; case JEDI_COMBO_JSWIPE: switch( GET_POWERS(ch,JEDI_COMBO_NEW) ) { case JEDI_COMBO_NONE: break; case JEDI_COMBO_JOVER: dam *= 1.20; break; case JEDI_COMBO_JFLIP: dam *= 1.10; break; case JEDI_COMBO_JUPPER: dam *= 1.40; break; case JEDI_COMBO_JBACK: dam *= 0.75; break; case JEDI_COMBO_JSLICE: dam *= 1.30; break; case JEDI_COMBO_JSWIPE: dam *= 0.50; break; case JEDI_COMBO_JSLASH: dam *= 1.50; break; case JEDI_COMBO_JROLL: dam *= 0.75; break; } break; case JEDI_COMBO_JSLASH: switch( GET_POWERS(ch,JEDI_COMBO_NEW) ) { case JEDI_COMBO_NONE: break; case JEDI_COMBO_JOVER: dam *= 1.20; break; case JEDI_COMBO_JFLIP: dam *= 0.75; break; case JEDI_COMBO_JUPPER: dam *= 1.30; break; case JEDI_COMBO_JBACK: dam *= 0.75; break; case JEDI_COMBO_JSLICE: dam *= 1.50; break; case JEDI_COMBO_JSWIPE: dam *= 1.40; break; case JEDI_COMBO_JSLASH: dam *= 0.50; break; case JEDI_COMBO_JROLL: dam *= 1.10; break; } break; case JEDI_COMBO_JROLL: switch( GET_POWERS(ch,JEDI_COMBO_NEW) ) { case JEDI_COMBO_NONE: break; case JEDI_COMBO_JOVER: dam *= 1.10; break; case JEDI_COMBO_JFLIP: dam *= 1.30; break; case JEDI_COMBO_JUPPER: dam *= 0.75; break; case JEDI_COMBO_JBACK: dam *= 1.50; break; case JEDI_COMBO_JSLICE: dam *= 0.75; break; case JEDI_COMBO_JSWIPE: dam *= 1.20; break; case JEDI_COMBO_JSLASH: dam *= 1.40; break; case JEDI_COMBO_JROLL: dam *= 0.50; break; } break; } return dam; } int snarf_jedi_combo_ws( CHAR_DATA *ch, int ws ) { switch( GET_POWERS(ch,JEDI_COMBO_OLD) ) { case JEDI_COMBO_NONE: break; case JEDI_COMBO_JOVER: switch( GET_POWERS(ch,JEDI_COMBO_NEW) ) { case JEDI_COMBO_NONE: break; case JEDI_COMBO_JOVER: ws *= 2.00; break; case JEDI_COMBO_JFLIP: ws *= 0.90; break; case JEDI_COMBO_JUPPER: ws *= 1.25; break; case JEDI_COMBO_JBACK: ws *= 0.50; break; case JEDI_COMBO_JSLICE: ws *= 1.25; break; case JEDI_COMBO_JSWIPE: ws *= 0.80; break; case JEDI_COMBO_JSLASH: ws *= 0.70; break; case JEDI_COMBO_JROLL: ws *= 0.60; break; } break; case JEDI_COMBO_JFLIP: switch( GET_POWERS(ch,JEDI_COMBO_NEW) ) { case JEDI_COMBO_NONE: break; case JEDI_COMBO_JOVER: ws *= 0.90; break; case JEDI_COMBO_JFLIP: ws *= 2.00; break; case JEDI_COMBO_JUPPER: ws *= 1.25; break; case JEDI_COMBO_JBACK: ws *= 0.50; break; case JEDI_COMBO_JSLICE: ws *= 1.25; break; case JEDI_COMBO_JSWIPE: ws *= 0.80; break; case JEDI_COMBO_JSLASH: ws *= 0.70; break; case JEDI_COMBO_JROLL: ws *= 0.60; break; } break; case JEDI_COMBO_JUPPER: switch( GET_POWERS(ch,JEDI_COMBO_NEW) ) { case JEDI_COMBO_NONE: break; case JEDI_COMBO_JOVER: ws *= 0.60; break; case JEDI_COMBO_JFLIP: ws *= 0.70; break; case JEDI_COMBO_JUPPER: ws *= 2.00; break; case JEDI_COMBO_JBACK: ws *= 1.25; break; case JEDI_COMBO_JSLICE: ws *= 0.50; break; case JEDI_COMBO_JSWIPE: ws *= 0.80; break; case JEDI_COMBO_JSLASH: ws *= 1.25; break; case JEDI_COMBO_JROLL: ws *= 0.90; break; } break; case JEDI_COMBO_JBACK: switch( GET_POWERS(ch,JEDI_COMBO_NEW) ) { case JEDI_COMBO_NONE: break; case JEDI_COMBO_JOVER: ws *= 1.25; break; case JEDI_COMBO_JFLIP: ws *= 0.70; break; case JEDI_COMBO_JUPPER: ws *= 1.25; break; case JEDI_COMBO_JBACK: ws *= 2.00; break; case JEDI_COMBO_JSLICE: ws *= 1.25; break; case JEDI_COMBO_JSWIPE: ws *= 0.90; break; case JEDI_COMBO_JSLASH: ws *= 0.60; break; case JEDI_COMBO_JROLL: ws *= 0.50; break; } break; case JEDI_COMBO_JSLICE: switch( GET_POWERS(ch,JEDI_COMBO_NEW) ) { case JEDI_COMBO_NONE: break; case JEDI_COMBO_JOVER: ws *= 0.70; break; case JEDI_COMBO_JFLIP: ws *= 0.60; break; case JEDI_COMBO_JUPPER: ws *= 0.90; break; case JEDI_COMBO_JBACK: ws *= 1.25; break; case JEDI_COMBO_JSLICE: ws *= 2.00; break; case JEDI_COMBO_JSWIPE: ws *= 0.50; break; case JEDI_COMBO_JSLASH: ws *= 0.80; break; case JEDI_COMBO_JROLL: ws *= 1.25; break; } break; case JEDI_COMBO_JSWIPE: switch( GET_POWERS(ch,JEDI_COMBO_NEW) ) { case JEDI_COMBO_NONE: break; case JEDI_COMBO_JOVER: ws *= 0.80; break; case JEDI_COMBO_JFLIP: ws *= 0.90; break; case JEDI_COMBO_JUPPER: ws *= 0.60; break; case JEDI_COMBO_JBACK: ws *= 1.25; break; case JEDI_COMBO_JSLICE: ws *= 0.70; break; case JEDI_COMBO_JSWIPE: ws *= 2.00; break; case JEDI_COMBO_JSLASH: ws *= 0.50; break; case JEDI_COMBO_JROLL: ws *= 1.25; break; } break; case JEDI_COMBO_JSLASH: switch( GET_POWERS(ch,JEDI_COMBO_NEW) ) { case JEDI_COMBO_NONE: break; case JEDI_COMBO_JOVER: ws *= 0.80; break; case JEDI_COMBO_JFLIP: ws *= 1.25; break; case JEDI_COMBO_JUPPER: ws *= 0.70; break; case JEDI_COMBO_JBACK: ws *= 1.25; break; case JEDI_COMBO_JSLICE: ws *= 0.50; break; case JEDI_COMBO_JSWIPE: ws *= 0.60; break; case JEDI_COMBO_JSLASH: ws *= 2.00; break; case JEDI_COMBO_JROLL: ws *= 0.90; break; } break; case JEDI_COMBO_JROLL: switch( GET_POWERS(ch,JEDI_COMBO_NEW) ) { case JEDI_COMBO_NONE: break; case JEDI_COMBO_JOVER: ws *= 0.90; break; case JEDI_COMBO_JFLIP: ws *= 0.70; break; case JEDI_COMBO_JUPPER: ws *= 1.25; break; case JEDI_COMBO_JBACK: ws *= 0.50; break; case JEDI_COMBO_JSLICE: ws *= 1.25; break; case JEDI_COMBO_JSWIPE: ws *= 0.80; break; case JEDI_COMBO_JSLASH: ws *= 0.60; break; case JEDI_COMBO_JROLL: ws *= 2.00; break; } break; } return ws; } void find_jedi_chain_affect( CHAR_DATA *ch, CHAR_DATA *victim ) { int i = number_range(1,20); AFFECT_DATA af; int sn; CHAR_DATA *rch; OBJ_DATA *obj; switch( i ) { default: log_string("This should NOT be happening! find_jedi_chain_affect is b0rked!"); break; case JEDI_COMBO_AFF_HASTE: /* Haste */ act("#7$n eminates a strong force energy and suddenly becomes a blur!#n",ch,NULL,NULL,TO_NOTVICT); act("#7You eminate a strong force energy and suddenly become a blur!#n",ch,NULL,NULL,TO_CHAR); if( (sn = skill_lookup("haste")) < 0 ) { log_string("JEDI_COMBO_AFF_HASTE: Can not find the haste spell!"); return; } af.type = sn; af.modifier = 0; af.location = APPLY_NONE; af.duration = 10; af.bitvector = AFF_HASTE; affect_to_char(ch,&af); break; case JEDI_COMBO_AFF_SLOW: /* Slow */ act("#7$n eminates a strong force energy causing $N's movements to slow!#n",ch,NULL,victim,TO_NOTVICT); act("#7You eminate a strong force energy causing $N's movements to slow!#n",ch,NULL,victim,TO_CHAR); act("#7$n eminates a string force energy causing your movements to slow!#n",ch,NULL,victim,TO_VICT); if( (sn = skill_lookup("slow")) < 0 ) { log_string("JEDI_COMBO_AFF_SLOW: Can not find the slow spell!"); return; } af.type = sn; af.modifier = 0; af.location = APPLY_NONE; af.duration = 10; af.bitvector = AFF2_SLOW; affect_to_char2(victim,&af,1); break; case JEDI_COMBO_AFF_SHEAL: /* Small Heal */ i = number_range(1,1000); act2("#7$n surrounds $mself with the force, mending $s cuts. [$D]#n",ch,NULL,NULL,TO_NOTVICT,i); act2("#7You surround yourself with the force, mending your cuts. [$D]#n",ch,NULL,NULL,TO_CHAR,i); ch->hit += i; update_pos(ch); break; case JEDI_COMBO_AFF_MHEAL: /* Medium Heal */ i = number_range(1000,2000); act2("#7$n surrounds $mself with the force, mending $s bones. [$D]#n",ch,NULL,NULL,TO_NOTVICT,i); act2("#7You surround yourself with the force, mending your bones. [$D]#n",ch,NULL,NULL,TO_CHAR,i); ch->hit += i; update_pos(ch); break; case JEDI_COMBO_AFF_LHEAL: /* Large Heal */ i = number_range(2000,3000); act2("#7$n surrounds $mself with the force, mending $s critical wounds. [$D]#n",ch,NULL,NULL,TO_NOTVICT,i); act2("#7You surround yourself with the force, mending your critical wounds. [$D]#n",ch,NULL,NULL,TO_CHAR,i); ch->hit += i; update_pos(ch); break; case JEDI_COMBO_AFF_SDAM: /* Small Damage */ i = number_range(1,1000); act2("#7$n sends a wave of dark energies at $N! [$D]#n",ch,NULL,victim,TO_NOTVICT,i); act2("#7You send a wave of dark energies at $N! [$D]#n",ch,NULL,victim,TO_CHAR,i); act2("#7$n sends a wave of dark energies at you! [$D]#n",ch,NULL,victim,TO_VICT,i); hurt_person(ch,victim,i); break; case JEDI_COMBO_AFF_MDAM: /* Medium Damage */ i = number_range(1000,2000); act2("#7$n concentrates $s hatred and channels it into $N! [$D]#n",ch,NULL,victim,TO_NOTVICT,i); act2("#7You concentrate your hatred and channel it into $N! [$D]#n",ch,NULL,victim,TO_CHAR,i); act2("#7$n concentrates $s hatred and channels it into you! [$D]#n",ch,NULL,victim,TO_VICT,i); hurt_person(ch,victim,i); break; case JEDI_COMBO_AFF_LDAM: /* Large Damage */ i = number_range(2000,3000); act2("#7A coruscating ball of dark matter forms from $n's body, and absorbs itself into $N! [$D]#n",ch,NULL,victim,TO_NOTVICT,i); act2("#7A coruscating ball of dark matter forms from your body, and absorbs itself into $N! [$D]#n",ch,NULL,victim,TO_CHAR,i); act2("#7A coruscating ball of dark matter forms from $n's body, and absorbs itself into you! [$D]#n",ch,NULL,victim,TO_VICT,i); hurt_person(ch,victim,i); break; case JEDI_COMBO_AFF_TOUGHNESS: /* Toughness */ act("#7A blinding light flashes, and the glint of a rainbow colored barrier is barely visible around $n!#n",ch,NULL,NULL,TO_NOTVICT); act("#7A blinding light flashes, and the glint of a rainbow colored barrier is barely visible around you!#n",ch,NULL,NULL,TO_CHAR); if( !IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_TOUGH) ) SET_BIT(GET_POWERS(ch,JEDI_BITS),JEDI_TOUGH); break; case JEDI_COMBO_AFF_ANTI_SANCT: /* Anti-Toughness */ act("#7A stream of blue light eminates from $n, striking $N in $s chest!#n",ch,NULL,victim,TO_NOTVICT); act("#7A stream of blue light eminates from you, striking $N in $s chest!#n",ch,NULL,victim,TO_CHAR); act("#7A stream of blue light eminates from $n, striking you in your chest!#n",ch,NULL,victim,TO_VICT); if( IS_AFFECTED(victim,AFF_SANCTUARY) ) { REMOVE_BIT(victim->affected_by,AFF_SANCTUARY); act("The white aura about $N's body fades.",NULL,NULL,victim,TO_ROOM); act("The white aura around your body fades.",ch,NULL,NULL,TO_VICT); } break; case JEDI_COMBO_AFF_STUN: /* Stun */ act("#7$n pulls back and slams $s fist into $N's torso; leaving $M stunned!#n",ch,NULL,victim,TO_NOTVICT); act("#7You pull back and slam your fist into $N's torso; leaving $M stunned!#n",ch,NULL,victim,TO_CHAR); act("#7$n pulls back and slams $s fist into your torso; leaving you stunned!#n",ch,NULL,victim,TO_VICT); set_stun(victim,2); break; case JEDI_COMBO_AFF_STOP_FIGHT: /* Stop Fight */ act("#7A strong presence of peace can be felt as a look of concentration passes over $n's face.#n",ch,NULL,NULL,TO_NOTVICT); act("#7A strong presence of peace can be felt as a look of concentration passes over your face.#n",ch,NULL,NULL,TO_CHAR); for( rch = ch->in_room->people; rch != NULL; rch = rch->next_in_room ) { if( rch->fighting != NULL ) stop_fighting(rch,TRUE); } break; case JEDI_COMBO_AFF_UNSTANCE: /* Unstance */ act("#7$n attacks $N's mind with the force, causing $M to lose concentration!#n",ch,NULL,victim,TO_NOTVICT); act("#7You attack $N's mind with the force, causing $M to lose concentration!#n",ch,NULL,victim,TO_CHAR); act("#7$n attacks your mind with the force, causing you to lose concentration!#n",ch,NULL,victim,TO_VICT); if( victim->stance[0] > -1 ) do_stance(victim,""); break; case JEDI_COMBO_AFF_DISARM: /* Disarm */ act("#7$n quickly catches $N's weapons with $s lightsaber, flinging them from $N's hands!#n",ch,NULL,victim,TO_NOTVICT); act("#7You quickly catch $N's weapons with your lightsaber, flinging them from $S hands!#n",ch,NULL,victim,TO_CHAR); act("#7$n quickly catches your weapons with $s lightsaber, flinging them from your hands!#n",ch,NULL,victim,TO_VICT); if( (obj = get_eq_char(victim,WEAR_WIELD)) != NULL ) unequip_char(victim,obj); if( (obj = get_eq_char(victim,WEAR_HOLD)) != NULL ) unequip_char(victim,obj); break; case JEDI_COMBO_AFF_UBER_JEDI: /* Uber-Jedi */ act("#7$n glows with a dark aura as raw force energies flow into $s body!#n",ch,NULL,NULL,TO_NOTVICT); act("#7You glow with a dark aura as raw force energies flow into your body!#n",ch,NULL,NULL,TO_CHAR); if( !IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_UBER) ) SET_BIT(GET_POWERS(ch,JEDI_BITS),JEDI_UBER); break; case JEDI_COMBO_AFF_LEECH_HEALTH: /* Leech Health */ i = number_range(1000,1500); act2("#7Raw energies eminate forth from $n, chipping away at $N's lifeforce! [$D]#n",ch,NULL,victim,TO_NOTVICT,i); act2("#7Raw energies eminate forth from you, chipping away at $N's lifeforce! [$D]#n",ch,NULL,victim,TO_CHAR,i); act2("#7Raw energies eminate forth from $n, chipping away at your lifeforce! [$D]#n",ch,NULL,victim,TO_VICT,i); hurt_person(ch,victim,i); ch->hit += i; update_pos(ch); break; case JEDI_COMBO_AFF_LEECH_MANA: /* Leech Mana */ i = number_range(1000,1500); act2("#7Raw energies eminate forth from $n, chipping away at $N's spiritual energy! [$D]#n",ch,NULL,victim,TO_NOTVICT,i); act2("#7Raw energies eminate forth from you, chipping away at $N's spiritual energy! [$D]#n",ch,NULL,victim,TO_CHAR,i); act2("#7Raw energies eminate forth from $n, chipping away at your spiritual energy! [$D]#n",ch,NULL,victim,TO_VICT,i); victim->mana -= i; ch->mana += i; update_pos(ch); update_pos(victim); break; case JEDI_COMBO_AFF_LEECH_MOVE: /* Leech Move */ i = number_range(1000,1500); act2("#7Raw energies eminate forth from $n, chipping away at $N's vitality! [$D]#n",ch,NULL,victim,TO_NOTVICT,i); act2("#7Raw energies eminate forth from you, chipping away at $N's vitality! [$D]#n",ch,NULL,victim,TO_CHAR,i); act2("#7Raw energies eminate forth from $n, chipping away at your vitality! [$D]#n",ch,NULL,victim,TO_VICT,i); victim->move -= i; ch->move += i; update_pos(ch); update_pos(victim); break; case JEDI_COMBO_AFF_LEECH_ALL: /* Leech All */ i = number_range(500,1000); act2("#7Raw energies eminate forth from $n, chipping away at $N's essence! [$D]#n",ch,NULL,victim,TO_NOTVICT,i); act2("#7Raw energies eminate forth from you, chipping away at $N's essence! [$D]#n",ch,NULL,victim,TO_CHAR,i); act2("#7Raw energies eminate forth from $n, chipping away at your essence! [$D]#n",ch,NULL,victim,TO_VICT,i); victim->hit -= i; victim->mana -= i; victim->move -= i; ch->hit += i; ch->mana += i; ch->move += i; update_pos(ch); update_pos(victim); break; case JEDI_COMBO_AFF_EQUILIZER: /* The Equilizer */ i = (victim->hit * 0.25); act2("#7$n deeply concentrates and rocks the room with an explosion of pure force energy directed at $N! [$D]#n",ch,NULL,victim,TO_NOTVICT,i); i = (ch->hit * 0.125); act2("#7$n gets caught up in the blast! [$D]#n",ch,NULL,victim,TO_NOTVICT,i); i = (victim->hit * 0.25); act2("#7You deeply concentrate and rock the room with an explosion of pure force energy directed at $N! [$D]#n",ch,NULL,victim,TO_CHAR,i); i = (ch->hit * 0.125); act2("#7You get caught up in the blast! [$D]#n",ch,NULL,NULL,TO_CHAR,i); i = (victim->hit * 0.25); act2("#7$n deeply concentrates and rocks the room with an explosion of pure force energy directed at you! [$D]#n",ch,NULL,victim,TO_VICT,i); i = (ch->hit * 0.125); act2("#7$n gets caught up in the blast! [$D]#n",ch,NULL,victim,TO_VICT,i); ch->hit *= 0.875; victim->hit *= 0.75; update_pos(ch); update_pos(victim); break; } return; } int find_jedi_chain_length( CHAR_DATA *ch ) { int ret_val = 3; if( ch == NULL ) return 0; if( IS_NPC(ch) ) return 0; if( !IS_CLASS(ch,CLASS_JEDI) ) return 0; switch( GET_POWERS(ch,JEDI_RANK) ) { default: ret_val += 0; break; case JEDI_RANK_APPRENTICE: ret_val += 0; break; case JEDI_RANK_INITIATE: ret_val += 1; break; case JEDI_RANK_GUARDIAN: ret_val += 1; break; case JEDI_RANK_KNIGHT: ret_val += 2; break; case JEDI_RANK_MASTER: ret_val += 2; break; case JEDI_RANK_LORD: ret_val += 3; break; } switch( GET_POWERS(ch,JEDI_STANCE_STYLE) ) { default: ret_val += 0; break; case JEDI_STYLE_LIGHT: ret_val += 3; break; case JEDI_STYLE_MEDIUM: ret_val += 0; break; case JEDI_STYLE_HEAVY: ret_val -= 3; break; } if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_UBER) ) ret_val += 2; if( ret_val < 0 ) ret_val = 0; return ret_val; } int jedi_eq_counter( CHAR_DATA *ch, bool exempt ) { int i = 0; /* If we use exempt, we count the equipment */ int ret_val = 0; /* worn, but skip over all hold, about, and */ OBJ_DATA *obj; /* feet items. --Kline */ for( i = 0; i < MAX_WEAR; i++ ) { if( (obj = get_eq_char(ch,i) ) == NULL ) continue; if( exempt ) { if( obj->wear_loc == WEAR_FEET ) continue; if( obj->wear_loc == WEAR_ABOUT ) continue; if( obj->wear_loc == WEAR_WIELD ) continue; if( obj->wear_loc == WEAR_HOLD ) continue; } ret_val++; } return ret_val; } /*** END UTILITY FUNCTIONS ***/ /*** BEGIN MISC COMMANDS ***/ void saber_craft( CHAR_DATA *ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; OBJ_DATA *obj; argument = one_argument(argument,arg); if( IS_NPC(ch) ) return; if( !IS_CLASS(ch,CLASS_JEDI) ) { do_huh(ch,""); return; } if( arg[0] == '\0' ) { stc("What do you wish to forge into a lightsaber?\n\r",ch); return; } if( (obj = get_obj_carry(ch,arg)) == NULL ) { stc("You're not carrying that.\n\r",ch); return; } if( ch->move < ch->max_move ) { stc("You must be entirely rested to focus upon your crafting.\n\r",ch); return; } if( IS_SET(obj->quest,QUEST_ARTIFACT) || obj->item_type != ITEM_WEAPON ) { stc("You can not forge a lightsaber from that item.\n\r",ch); return; } if( str_cmp(obj->questowner,ch->pcdata->switchname) ) { stc("You can not forge a lightsaber from a weapon which is not yours.\n\r",ch); return; } if( IS_SET(obj->extra_flags,ITEM_LIGHT_SABER) ) { stc("That has already been forged into a saber of pure energy!\n\r",ch); return; } ch->move = 0; SET_BIT(obj->extra_flags,ITEM_LOYAL); SET_BIT(obj->extra_flags,ITEM_LIGHT_SABER); obj->value[1] += 10; obj->value[2] += 15; oset_affect(ch,obj,15,APPLY_HITROLL,FALSE); oset_affect(ch,obj,15,APPLY_DAMROLL,FALSE); oset_affect(ch,obj,-50,APPLY_AC,FALSE); oset_affect(ch,obj,3,APPLY_STR,FALSE); oset_affect(ch,obj,3,APPLY_INT,FALSE); oset_affect(ch,obj,3,APPLY_WIS,FALSE); oset_affect(ch,obj,3,APPLY_DEX,FALSE); oset_affect(ch,obj,3,APPLY_CON,FALSE); stc("You concentrate deeply and craft the weapon into a saber of pure energy!\n\r",ch); WAIT_STATE(ch,36); return; } void jedi_show_powers( CHAR_DATA *ch, char *argument ) { char arg[MAX_STRING_LENGTH]; argument = one_argument(argument,arg); if( IS_NPC(ch) ) return; if( !IS_CLASS(ch,CLASS_JEDI) ) { do_huh(ch,""); return; } if( arg[0] == '\0' ) { display_class_stats(ch); sprintf(arg,"EQ EXEMPT: %d\n\r",jedi_eq_counter(ch,TRUE)); stc(arg,ch); sprintf(arg,"EQ FULL : %d\n\r",jedi_eq_counter(ch,FALSE)); stc(arg,ch); return; } else if( !str_cmp(arg,"stance") ) { improve_class(ch,JEDI_STANCE); return; } else if( !str_cmp(arg,"attack") ) { improve_class(ch,JEDI_ATTACK); return; } else if( !str_cmp(arg,"defense") ) { improve_class(ch,JEDI_DEFENSE); return; } else if( !str_cmp(arg,"heal") ) { improve_class(ch,JEDI_FORCE_HEAL); return; } else if( !str_cmp(arg,"absorb") ) { improve_class(ch,JEDI_FORCE_ABSORB); return; } else if( !str_cmp(arg,"shield") ) { improve_class(ch,JEDI_FORCE_SHIELD); return; } else if( !str_cmp(arg,"mindtrick") ) { improve_class(ch,JEDI_FORCE_MIND_TRICK); return; } else if( !str_cmp(arg,"sight") ) { improve_class(ch,JEDI_FORCE_SIGHT); return; } else if( !str_cmp(arg,"speed") ) { improve_class(ch,JEDI_FORCE_SPEED); return; } else if( !str_cmp(arg,"jump") ) { improve_class(ch,JEDI_FORCE_JUMP); return; } else if( !str_cmp(arg,"push") ) { improve_class(ch,JEDI_FORCE_PUSH); return; } else if( !str_cmp(arg,"pull") ) { improve_class(ch,JEDI_FORCE_PULL); return; } else if( !str_cmp(arg,"light") ) { improve_class(ch,JEDI_LIGHT); return; } else if( !str_cmp(arg,"dark") ) { improve_class(ch,JEDI_DARK); return; } else if( !str_cmp(arg,"neutral") ) { improve_class(ch,JEDI_NEUTRAL); return; } else if( !str_cmp(arg,"grip") ) { improve_class(ch,JEDI_FORCE_GRIP); return; } else if( !str_cmp(arg,"rage") ) { improve_class(ch,JEDI_FORCE_RAGE); return; } else if( !str_cmp(arg,"drain") ) { improve_class(ch,JEDI_FORCE_DRAIN); return; } else if( !str_cmp(arg,"lightning") ) { improve_class(ch,JEDI_FORCE_LIGHTNING); return; } else if( !str_cmp(arg,"forcepool") ) { improve_class(ch,JEDI_FORCE_POOL_MAX); return; } return; } void combat_style( CHAR_DATA *ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; argument = one_argument(argument,arg); if( !IS_NPC(ch) ) return; if( !IS_CLASS(ch,CLASS_JEDI) ) { do_huh(ch,""); return; } if( GET_POWERS(ch,JEDI_STANCE) < 1 ) { stc("You have know knowledge of combat styles.\n\r",ch); return; } if( arg[0] == '\0' ) { stc("Combat style can be changed with combatstyle <style>\n\r",ch); stc("You currently know of the following combat styles:\n\r",ch); if( GET_POWERS(ch,JEDI_STANCE) >= 1 ) stc(" Medium: No bonuses, no penalties. All around balanced.\n\r",ch); if( GET_POWERS(ch,JEDI_STANCE) >= 5 ) stc(" Light : Faster attacking, less damage taken, less damage dealt.\n\r",ch); if( GET_POWERS(ch,JEDI_STANCE) == 10 ) stc(" Heavy : Slower attacking, more damage taken, more damage dealt.\n\r",ch); } if( !str_cmp(arg,"medium") ) { GET_POWERS(ch,JEDI_STANCE_STYLE) = JEDI_STYLE_MEDIUM; stc("You now fight in the medium combat style.\n\r",ch); return; } else if( !str_cmp(arg,"light") ) { GET_POWERS(ch,JEDI_STANCE_STYLE) = JEDI_STYLE_LIGHT; stc("You now fight in the light combat style.\n\r",ch); return; } else if( !str_cmp(arg,"heavy") ) { GET_POWERS(ch,JEDI_STANCE_STYLE) = JEDI_STYLE_HEAVY; stc("You now fight in the heavy combat style.\n\r",ch); return; } return; } /*** END MISC COMMANDS ***/ /*** BEGIN COMBO COMMANDS ***/ void jover( CHAR_DATA *ch, char *argument ) { CHAR_DATA *victim; int dam = number_range(JEDI_MIN_DAM,JEDI_MAX_DAM); int mod = number_range(JEDI_MIN_RAND,JEDI_MAX_RAND); int i; int ws = JEDI_WAIT; if( IS_NPC(ch) ) return; if( !IS_CLASS(ch,CLASS_JEDI) ) { do_huh(ch,""); return; } if( (victim = ch->fighting) == NULL ) { stc("You're not even fighting!\n\r",ch); return; } if( get_eq_char(ch,WEAR_WIELD) == NULL && get_eq_char(ch,WEAR_HOLD) == NULL ) { stc("You're not even wielding a weapon!\n\r",ch); return; } if( get_eq_char(ch,WEAR_WIELD) != NULL ) { if( !IS_SET(get_eq_char(ch,WEAR_WIELD)->extra_flags,ITEM_LIGHT_SABER) ) stc("You must be wielding a lightsaber.\n\r",ch); return; } if( get_eq_char(ch,WEAR_HOLD) != NULL ) { if( !IS_SET(get_eq_char(ch,WEAR_HOLD)->extra_flags,ITEM_LIGHT_SABER) ) stc("You must be wielding a lightsaber.\n\r",ch); return; } GET_POWERS(ch,JEDI_COMBO_OLD) = GET_POWERS(ch,JEDI_COMBO_NEW); GET_POWERS(ch,JEDI_COMBO_NEW) = JEDI_COMBO_JOVER; GET_POWERS(ch,JEDI_CHAIN_LENGTH)++; if( GET_POWERS(ch,JEDI_CHAIN_LENGTH) > 1 ) { for( i = 0; i < GET_POWERS(ch,JEDI_CHAIN_LENGTH); i++ ) dam += mod; if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_UBER) ) dam *= JEDI_DAM_MOD_UBER; if( GET_POWERS(ch,JEDI_CHAIN_LENGTH) == find_jedi_chain_length(ch) ) { dam += (mod * JEDI_PEAK_MOD); stc("#7Your chain of attacks has reached it's peak!#n\n\r",ch); find_jedi_chain_affect(ch,victim); GET_POWERS(ch,JEDI_CHAIN_LENGTH) = 0; } } if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_SPEED) ) ws /= JEDI_WS_MOD_SPEED; if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_UBER) ) ws /= JEDI_WS_MOD_UBER; switch( GET_POWERS(ch,JEDI_STANCE_STYLE) ) { default: break; case JEDI_STYLE_LIGHT: dam *= JEDI_LIGHT_DAM_MOD; ws /= JEDI_LIGHT_WS_MOD; break; case JEDI_STYLE_MEDIUM: break; case JEDI_STYLE_HEAVY: dam *= JEDI_HEAVY_DAM_MOD; ws *= JEDI_HEAVY_WS_MOD; break; } snarf_jedi_combo_dam(ch,dam); snarf_jedi_combo_ws(ch,ws); act2("You leap above $N's head, slashing deeply into $M with your lightsaber! [$D]",ch,NULL,victim,TO_CHAR,dam); act2("$n leaps above your head, slashing deeply into you with $s lightsaber! [$D]",ch,NULL,victim,TO_VICT,dam); act2("$n leaps above $N's head, slashing deeply into $M with $s lightsaber! [$D]",ch,NULL,victim,TO_NOTVICT,dam); WAIT_STATE(ch,ws); hurt_person(ch,victim,dam); return; } void jflip( CHAR_DATA *ch, char *argument ) { CHAR_DATA *victim; int dam = number_range(JEDI_MIN_DAM,JEDI_MAX_DAM); int mod = number_range(JEDI_MIN_RAND,JEDI_MAX_RAND); int i; int ws = JEDI_WAIT; if( IS_NPC(ch) ) return; if( !IS_CLASS(ch,CLASS_JEDI) ) { do_huh(ch,""); return; } if( (victim = ch->fighting) == NULL ) { stc("You're not even fighting!\n\r",ch); return; } if( get_eq_char(ch,WEAR_WIELD) == NULL && get_eq_char(ch,WEAR_HOLD) == NULL ) { stc("You're not even wielding a weapon!\n\r",ch); return; } if( get_eq_char(ch,WEAR_WIELD) != NULL ) { if( !IS_SET(get_eq_char(ch,WEAR_WIELD)->extra_flags,ITEM_LIGHT_SABER) ) stc("You must be wielding a lightsaber.\n\r",ch); return; } if( get_eq_char(ch,WEAR_HOLD) != NULL ) { if( !IS_SET(get_eq_char(ch,WEAR_HOLD)->extra_flags,ITEM_LIGHT_SABER) ) stc("You must be wielding a lightsaber.\n\r",ch); return; } GET_POWERS(ch,JEDI_COMBO_OLD) = GET_POWERS(ch,JEDI_COMBO_NEW); GET_POWERS(ch,JEDI_COMBO_NEW) = JEDI_COMBO_JFLIP; GET_POWERS(ch,JEDI_CHAIN_LENGTH)++; if( GET_POWERS(ch,JEDI_CHAIN_LENGTH) > 1 ) { for( i = 0; i < GET_POWERS(ch,JEDI_CHAIN_LENGTH); i++ ) dam += mod; if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_UBER) ) dam *= JEDI_DAM_MOD_UBER; if( GET_POWERS(ch,JEDI_CHAIN_LENGTH) == find_jedi_chain_length(ch) ) { dam += (mod * JEDI_PEAK_MOD); stc("#7Your chain of attacks has reached it's peak!#n\n\r",ch); find_jedi_chain_affect(ch,victim); GET_POWERS(ch,JEDI_CHAIN_LENGTH) = 0; } } if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_SPEED) ) ws /= JEDI_WS_MOD_SPEED; if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_UBER) ) ws /= JEDI_WS_MOD_UBER; switch( GET_POWERS(ch,JEDI_STANCE_STYLE) ) { default: break; case JEDI_STYLE_LIGHT: dam *= JEDI_LIGHT_DAM_MOD; ws /= JEDI_LIGHT_WS_MOD; break; case JEDI_STYLE_MEDIUM: break; case JEDI_STYLE_HEAVY: dam *= JEDI_HEAVY_DAM_MOD; ws *= JEDI_HEAVY_WS_MOD; break; } snarf_jedi_combo_dam(ch,dam); snarf_jedi_combo_ws(ch,ws); act2("You flip over $N's head, slicing into $M with your lightsaber! [$D]",ch,NULL,victim,TO_CHAR,dam); act2("$n flips over your head, slicing into you with $s lightsaber! [$D]",ch,NULL,victim,TO_VICT,dam); act2("$n flips over $N's head, slicing into $M with $s lightsaber! [$D]",ch,NULL,victim,TO_NOTVICT,dam); WAIT_STATE(ch,ws); hurt_person(ch,victim,dam); return; } void jupper( CHAR_DATA *ch, char *argument ) { CHAR_DATA *victim; int dam = number_range(JEDI_MIN_DAM,JEDI_MAX_DAM); int mod = number_range(JEDI_MIN_RAND,JEDI_MAX_RAND); int i; int ws = JEDI_WAIT; if( IS_NPC(ch) ) return; if( !IS_CLASS(ch,CLASS_JEDI) ) { do_huh(ch,""); return; } if( (victim = ch->fighting) == NULL ) { stc("You're not even fighting!\n\r",ch); return; } if( get_eq_char(ch,WEAR_WIELD) == NULL && get_eq_char(ch,WEAR_HOLD) == NULL ) { stc("You're not even wielding a weapon!\n\r",ch); return; } if( get_eq_char(ch,WEAR_WIELD) != NULL ) { if( !IS_SET(get_eq_char(ch,WEAR_WIELD)->extra_flags,ITEM_LIGHT_SABER) ) stc("You must be wielding a lightsaber.\n\r",ch); return; } if( get_eq_char(ch,WEAR_HOLD) != NULL ) { if( !IS_SET(get_eq_char(ch,WEAR_HOLD)->extra_flags,ITEM_LIGHT_SABER) ) stc("You must be wielding a lightsaber.\n\r",ch); return; } GET_POWERS(ch,JEDI_COMBO_OLD) = GET_POWERS(ch,JEDI_COMBO_NEW); GET_POWERS(ch,JEDI_COMBO_NEW) = JEDI_COMBO_JUPPER; GET_POWERS(ch,JEDI_CHAIN_LENGTH)++; if( GET_POWERS(ch,JEDI_CHAIN_LENGTH) > 1 ) { for( i = 0; i < GET_POWERS(ch,JEDI_CHAIN_LENGTH); i++ ) dam += mod; if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_UBER) ) dam *= JEDI_DAM_MOD_UBER; if( GET_POWERS(ch,JEDI_CHAIN_LENGTH) == find_jedi_chain_length(ch) ) { dam += (mod * JEDI_PEAK_MOD); stc("#7Your chain of attacks has reached it's peak!#n\n\r",ch); find_jedi_chain_affect(ch,victim); GET_POWERS(ch,JEDI_CHAIN_LENGTH) = 0; } } if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_SPEED) ) ws /= JEDI_WS_MOD_SPEED; if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_UBER) ) ws /= JEDI_WS_MOD_UBER; switch( GET_POWERS(ch,JEDI_STANCE_STYLE) ) { default: break; case JEDI_STYLE_LIGHT: dam *= JEDI_LIGHT_DAM_MOD; ws /= JEDI_LIGHT_WS_MOD; break; case JEDI_STYLE_MEDIUM: break; case JEDI_STYLE_HEAVY: dam *= JEDI_HEAVY_DAM_MOD; ws *= JEDI_HEAVY_WS_MOD; break; } snarf_jedi_combo_dam(ch,dam); snarf_jedi_combo_ws(ch,ws); act2("You sweep your lightsaber in an upwards arc, cutting deep into $N's chest! [$D]",ch,NULL,victim,TO_CHAR,dam); act2("$n sweeps $s lightsaber in an upwards arc, cutting deep into your chest! [$D]",ch,NULL,victim,TO_VICT,dam); act2("$n sweeps $s lightsaber in an upwards arc, cutting deep into $N's chest! [$D]",ch,NULL,victim,TO_NOTVICT,dam); WAIT_STATE(ch,ws); hurt_person(ch,victim,dam); return; } void jback( CHAR_DATA *ch, char *argument ) { CHAR_DATA *victim; int dam = number_range(JEDI_MIN_DAM,JEDI_MAX_DAM); int mod = number_range(JEDI_MIN_RAND,JEDI_MAX_RAND); int i; int ws = JEDI_WAIT; if( IS_NPC(ch) ) return; if( !IS_CLASS(ch,CLASS_JEDI) ) { do_huh(ch,""); return; } if( (victim = ch->fighting) == NULL ) { stc("You're not even fighting!\n\r",ch); return; } if( get_eq_char(ch,WEAR_WIELD) == NULL && get_eq_char(ch,WEAR_HOLD) == NULL ) { stc("You're not even wielding a weapon!\n\r",ch); return; } if( get_eq_char(ch,WEAR_WIELD) != NULL ) { if( !IS_SET(get_eq_char(ch,WEAR_WIELD)->extra_flags,ITEM_LIGHT_SABER) ) stc("You must be wielding a lightsaber.\n\r",ch); return; } if( get_eq_char(ch,WEAR_HOLD) != NULL ) { if( !IS_SET(get_eq_char(ch,WEAR_HOLD)->extra_flags,ITEM_LIGHT_SABER) ) stc("You must be wielding a lightsaber.\n\r",ch); return; } GET_POWERS(ch,JEDI_COMBO_OLD) = GET_POWERS(ch,JEDI_COMBO_NEW); GET_POWERS(ch,JEDI_COMBO_NEW) = JEDI_COMBO_JBACK; GET_POWERS(ch,JEDI_CHAIN_LENGTH)++; if( GET_POWERS(ch,JEDI_CHAIN_LENGTH) > 1 ) { for( i = 0; i < GET_POWERS(ch,JEDI_CHAIN_LENGTH); i++ ) dam += mod; if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_UBER) ) dam *= JEDI_DAM_MOD_UBER; if( GET_POWERS(ch,JEDI_CHAIN_LENGTH) == find_jedi_chain_length(ch) ) { dam += (mod * JEDI_PEAK_MOD); stc("#7Your chain of attacks has reached it's peak!#n\n\r",ch); find_jedi_chain_affect(ch,victim); GET_POWERS(ch,JEDI_CHAIN_LENGTH) = 0; } } if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_SPEED) ) ws /= JEDI_WS_MOD_SPEED; if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_UBER) ) ws /= JEDI_WS_MOD_UBER; switch( GET_POWERS(ch,JEDI_STANCE_STYLE) ) { default: break; case JEDI_STYLE_LIGHT: dam *= JEDI_LIGHT_DAM_MOD; ws /= JEDI_LIGHT_WS_MOD; break; case JEDI_STYLE_MEDIUM: break; case JEDI_STYLE_HEAVY: dam *= JEDI_HEAVY_DAM_MOD; ws *= JEDI_HEAVY_WS_MOD; break; } snarf_jedi_combo_dam(ch,dam); snarf_jedi_combo_ws(ch,ws); act2("You maneuver behind $N and violently thrust your lightsaber into $S back! [$D]",ch,NULL,victim,TO_CHAR,dam); act2("$n maneuvers behind you and violently thrusts $s lightsaber into your back! [$D]",ch,NULL,victim,TO_VICT,dam); act2("$n maneuvers behind $N and violently thrusts $s lightsaber into $S back! [$D]",ch,NULL,victim,TO_NOTVICT,dam); WAIT_STATE(ch,ws); hurt_person(ch,victim,dam); return; } void jslice( CHAR_DATA *ch, char *argument ) { CHAR_DATA *victim; int dam = number_range(JEDI_MIN_DAM,JEDI_MAX_DAM); int mod = number_range(JEDI_MIN_RAND,JEDI_MAX_RAND); int i; int ws = JEDI_WAIT; if( IS_NPC(ch) ) return; if( !IS_CLASS(ch,CLASS_JEDI) ) { do_huh(ch,""); return; } if( (victim = ch->fighting) == NULL ) { stc("You're not even fighting!\n\r",ch); return; } if( get_eq_char(ch,WEAR_WIELD) == NULL && get_eq_char(ch,WEAR_HOLD) == NULL ) { stc("You're not even wielding a weapon!\n\r",ch); return; } if( get_eq_char(ch,WEAR_WIELD) != NULL ) { if( !IS_SET(get_eq_char(ch,WEAR_WIELD)->extra_flags,ITEM_LIGHT_SABER) ) stc("You must be wielding a lightsaber.\n\r",ch); return; } if( get_eq_char(ch,WEAR_HOLD) != NULL ) { if( !IS_SET(get_eq_char(ch,WEAR_HOLD)->extra_flags,ITEM_LIGHT_SABER) ) stc("You must be wielding a lightsaber.\n\r",ch); return; } GET_POWERS(ch,JEDI_COMBO_OLD) = GET_POWERS(ch,JEDI_COMBO_NEW); GET_POWERS(ch,JEDI_COMBO_NEW) = JEDI_COMBO_JSLICE; GET_POWERS(ch,JEDI_CHAIN_LENGTH)++; if( GET_POWERS(ch,JEDI_CHAIN_LENGTH) > 1 ) { for( i = 0; i < GET_POWERS(ch,JEDI_CHAIN_LENGTH); i++ ) dam += mod; if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_UBER) ) dam *= JEDI_DAM_MOD_UBER; if( GET_POWERS(ch,JEDI_CHAIN_LENGTH) == find_jedi_chain_length(ch) ) { dam += (mod * JEDI_PEAK_MOD); stc("#7Your chain of attacks has reached it's peak!#n\n\r",ch); find_jedi_chain_affect(ch,victim); GET_POWERS(ch,JEDI_CHAIN_LENGTH) = 0; } } if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_SPEED) ) ws /= JEDI_WS_MOD_SPEED; if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_UBER) ) ws /= JEDI_WS_MOD_UBER; switch( GET_POWERS(ch,JEDI_STANCE_STYLE) ) { default: break; case JEDI_STYLE_LIGHT: dam *= JEDI_LIGHT_DAM_MOD; ws /= JEDI_LIGHT_WS_MOD; break; case JEDI_STYLE_MEDIUM: break; case JEDI_STYLE_HEAVY: dam *= JEDI_HEAVY_DAM_MOD; ws *= JEDI_HEAVY_WS_MOD; break; } snarf_jedi_combo_dam(ch,dam); snarf_jedi_combo_ws(ch,ws); act2("You slice $N deeply across $E chest! [$D]",ch,NULL,victim,TO_CHAR,dam); act2("$n slices you deeply across your chest! [$D]",ch,NULL,victim,TO_VICT,dam); act2("$n slices $N deeply across $E chest! [$D]",ch,NULL,victim,TO_NOTVICT,dam); WAIT_STATE(ch,ws); hurt_person(ch,victim,dam); return; } void jswipe( CHAR_DATA *ch, char *argument ) { CHAR_DATA *victim; int dam = number_range(JEDI_MIN_DAM,JEDI_MAX_DAM); int mod = number_range(JEDI_MIN_RAND,JEDI_MAX_RAND); int i; int ws = JEDI_WAIT; if( IS_NPC(ch) ) return; if( !IS_CLASS(ch,CLASS_JEDI) ) { do_huh(ch,""); return; } if( (victim = ch->fighting) == NULL ) { stc("You're not even fighting!\n\r",ch); return; } if( get_eq_char(ch,WEAR_WIELD) == NULL && get_eq_char(ch,WEAR_HOLD) == NULL ) { stc("You're not even wielding a weapon!\n\r",ch); return; } if( get_eq_char(ch,WEAR_WIELD) != NULL ) { if( !IS_SET(get_eq_char(ch,WEAR_WIELD)->extra_flags,ITEM_LIGHT_SABER) ) stc("You must be wielding a lightsaber.\n\r",ch); return; } if( get_eq_char(ch,WEAR_HOLD) != NULL ) { if( !IS_SET(get_eq_char(ch,WEAR_HOLD)->extra_flags,ITEM_LIGHT_SABER) ) stc("You must be wielding a lightsaber.\n\r",ch); return; } GET_POWERS(ch,JEDI_COMBO_OLD) = GET_POWERS(ch,JEDI_COMBO_NEW); GET_POWERS(ch,JEDI_COMBO_NEW) = JEDI_COMBO_JSWIPE; GET_POWERS(ch,JEDI_CHAIN_LENGTH)++; if( GET_POWERS(ch,JEDI_CHAIN_LENGTH) > 1 ) { for( i = 0; i < GET_POWERS(ch,JEDI_CHAIN_LENGTH); i++ ) dam += mod; if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_UBER) ) dam *= JEDI_DAM_MOD_UBER; if( GET_POWERS(ch,JEDI_CHAIN_LENGTH) == find_jedi_chain_length(ch) ) { dam += (mod * JEDI_PEAK_MOD); stc("#7Your chain of attacks has reached it's peak!#n\n\r",ch); find_jedi_chain_affect(ch,victim); GET_POWERS(ch,JEDI_CHAIN_LENGTH) = 0; } } if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_SPEED) ) ws /= JEDI_WS_MOD_SPEED; if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_UBER) ) ws /= JEDI_WS_MOD_UBER; switch( GET_POWERS(ch,JEDI_STANCE_STYLE) ) { default: break; case JEDI_STYLE_LIGHT: dam *= JEDI_LIGHT_DAM_MOD; ws /= JEDI_LIGHT_WS_MOD; break; case JEDI_STYLE_MEDIUM: break; case JEDI_STYLE_HEAVY: dam *= JEDI_HEAVY_DAM_MOD; ws *= JEDI_HEAVY_WS_MOD; break; } snarf_jedi_combo_dam(ch,dam); snarf_jedi_combo_ws(ch,ws); act2("You swipe your saber at $N, catching $S arm! [$D]",ch,NULL,victim,TO_CHAR,dam); act2("$n swipes $s saber at you, catching your arm! [$D]",ch,NULL,victim,TO_VICT,dam); act2("$n swipes $s saber at $N, catching $S arm! [$D]",ch,NULL,victim,TO_NOTVICT,dam); WAIT_STATE(ch,ws); hurt_person(ch,victim,dam); return; } void jslash( CHAR_DATA *ch, char *argument ) { CHAR_DATA *victim; int dam = number_range(JEDI_MIN_DAM,JEDI_MAX_DAM); int mod = number_range(JEDI_MIN_RAND,JEDI_MAX_RAND); int i; int ws = JEDI_WAIT; if( IS_NPC(ch) ) return; if( !IS_CLASS(ch,CLASS_JEDI) ) { do_huh(ch,""); return; } if( (victim = ch->fighting) == NULL ) { stc("You're not even fighting!\n\r",ch); return; } if( get_eq_char(ch,WEAR_WIELD) == NULL && get_eq_char(ch,WEAR_HOLD) == NULL ) { stc("You're not even wielding a weapon!\n\r",ch); return; } if( get_eq_char(ch,WEAR_WIELD) != NULL ) { if( !IS_SET(get_eq_char(ch,WEAR_WIELD)->extra_flags,ITEM_LIGHT_SABER) ) stc("You must be wielding a lightsaber.\n\r",ch); return; } if( get_eq_char(ch,WEAR_HOLD) != NULL ) { if( !IS_SET(get_eq_char(ch,WEAR_HOLD)->extra_flags,ITEM_LIGHT_SABER) ) stc("You must be wielding a lightsaber.\n\r",ch); return; } GET_POWERS(ch,JEDI_COMBO_OLD) = GET_POWERS(ch,JEDI_COMBO_NEW); GET_POWERS(ch,JEDI_COMBO_NEW) = JEDI_COMBO_JSLASH; GET_POWERS(ch,JEDI_CHAIN_LENGTH)++; if( GET_POWERS(ch,JEDI_CHAIN_LENGTH) > 1 ) { for( i = 0; i < GET_POWERS(ch,JEDI_CHAIN_LENGTH); i++ ) dam += mod; if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_UBER) ) dam *= JEDI_DAM_MOD_UBER; if( GET_POWERS(ch,JEDI_CHAIN_LENGTH) == find_jedi_chain_length(ch) ) { dam += (mod * JEDI_PEAK_MOD); stc("#7Your chain of attacks has reached it's peak!#n\n\r",ch); find_jedi_chain_affect(ch,victim); GET_POWERS(ch,JEDI_CHAIN_LENGTH) = 0; } } if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_SPEED) ) ws /= JEDI_WS_MOD_SPEED; if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_UBER) ) ws /= JEDI_WS_MOD_UBER; switch( GET_POWERS(ch,JEDI_STANCE_STYLE) ) { default: break; case JEDI_STYLE_LIGHT: dam *= JEDI_LIGHT_DAM_MOD; ws /= JEDI_LIGHT_WS_MOD; break; case JEDI_STYLE_MEDIUM: break; case JEDI_STYLE_HEAVY: dam *= JEDI_HEAVY_DAM_MOD; ws *= JEDI_HEAVY_WS_MOD; break; } snarf_jedi_combo_dam(ch,dam); snarf_jedi_combo_ws(ch,ws); act2("You assault $N with a heavy slash, nearly cleaving $M in two! [$D]",ch,NULL,victim,TO_CHAR,dam); act2("$n assaults you with a heavy slash, nearly cleaving you in two! [$D]",ch,NULL,victim,TO_VICT,dam); act2("$n assaults $N with a heavy slash, nearly cleaving $M in two! [$D]",ch,NULL,victim,TO_NOTVICT,dam); WAIT_STATE(ch,ws); hurt_person(ch,victim,dam); return; } void jroll( CHAR_DATA *ch, char *argument ) { CHAR_DATA *victim; int dam = number_range(JEDI_MIN_DAM,JEDI_MAX_DAM); int mod = number_range(JEDI_MIN_RAND,JEDI_MAX_RAND); int i; int ws = JEDI_WAIT; if( IS_NPC(ch) ) return; if( !IS_CLASS(ch,CLASS_JEDI) ) { do_huh(ch,""); return; } if( (victim = ch->fighting) == NULL ) { stc("You're not even fighting!\n\r",ch); return; } if( get_eq_char(ch,WEAR_WIELD) == NULL && get_eq_char(ch,WEAR_HOLD) == NULL ) { stc("You're not even wielding a weapon!\n\r",ch); return; } if( get_eq_char(ch,WEAR_WIELD) != NULL ) { if( !IS_SET(get_eq_char(ch,WEAR_WIELD)->extra_flags,ITEM_LIGHT_SABER) ) stc("You must be wielding a lightsaber.\n\r",ch); return; } if( get_eq_char(ch,WEAR_HOLD) != NULL ) { if( !IS_SET(get_eq_char(ch,WEAR_HOLD)->extra_flags,ITEM_LIGHT_SABER) ) stc("You must be wielding a lightsaber.\n\r",ch); return; } GET_POWERS(ch,JEDI_COMBO_OLD) = GET_POWERS(ch,JEDI_COMBO_NEW); GET_POWERS(ch,JEDI_COMBO_NEW) = JEDI_COMBO_JROLL; GET_POWERS(ch,JEDI_CHAIN_LENGTH)++; if( GET_POWERS(ch,JEDI_CHAIN_LENGTH) > 1 ) { for( i = 0; i < GET_POWERS(ch,JEDI_CHAIN_LENGTH); i++ ) dam += mod; if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_UBER) ) dam *= JEDI_DAM_MOD_UBER; if( GET_POWERS(ch,JEDI_CHAIN_LENGTH) == find_jedi_chain_length(ch) ) { dam += (mod * JEDI_PEAK_MOD); stc("#7Your chain of attacks has reached it's peak!#n\n\r",ch); find_jedi_chain_affect(ch,victim); GET_POWERS(ch,JEDI_CHAIN_LENGTH) = 0; } } if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_SPEED) ) ws /= JEDI_WS_MOD_SPEED; if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_UBER) ) ws /= JEDI_WS_MOD_UBER; switch( GET_POWERS(ch,JEDI_STANCE_STYLE) ) { default: break; case JEDI_STYLE_LIGHT: dam *= JEDI_LIGHT_DAM_MOD; ws /= JEDI_LIGHT_WS_MOD; break; case JEDI_STYLE_MEDIUM: break; case JEDI_STYLE_HEAVY: dam *= JEDI_HEAVY_DAM_MOD; ws *= JEDI_HEAVY_WS_MOD; break; } snarf_jedi_combo_dam(ch,dam); snarf_jedi_combo_ws(ch,ws); act2("You nimbly roll underneath $N, slashing into $S legs! [$D]",ch,NULL,victim,TO_CHAR,dam); act2("$n nimbly rolls underneath you, slashing into your legs! [$D]",ch,NULL,victim,TO_VICT,dam); act2("$n nimbly rolls underneath $N, slashing into $S legs! [$D]",ch,NULL,victim,TO_NOTVICT,dam); WAIT_STATE(ch,ws); hurt_person(ch,victim,dam); return; } /*** END COMBO COMMANDS ***/ /*** BEGIN FORCE POWERS ***/ void jedi_force_heal( CHAR_DATA *ch, char *argument ) { int heal = number_range(100,500); int i; int cost = 800; if( IS_NPC(ch) ) return; if( !IS_CLASS(ch,CLASS_JEDI) ) { do_huh(ch,""); return; } if( GET_POWERS(ch,JEDI_DARK) >= 5 ) { stc("A follower of the Sith can not use such a force power.\n\r",ch); return; } if( GET_POWERS(ch,JEDI_LIGHT) < 1 ) { stc("You are not trained in the path of the Jedi.\n\r",ch); return; } if( GET_POWERS(ch,JEDI_FORCE_HEAL) < 1 ) { stc("You are unlearned in the ways of healing yourself.\n\r",ch); return; } for( i = 0; i < GET_POWERS(ch,JEDI_LIGHT); i++ ) { heal += number_range(100,200); cost += 100; } switch( GET_POWERS(ch,JEDI_FORCE_HEAL) ) { default: break; case 1: heal *= 1.07; cost *= 1.03; break; case 2: heal *= 1.14; cost *= 1.06; break; case 3: heal *= 1.21; cost *= 1.09; break; case 4: heal *= 1.28; cost *= 1.12; break; case 5: heal *= 1.35; cost *= 1.15; break; case 6: heal *= 1.42; cost *= 1.18; break; case 7: heal *= 1.49; cost *= 1.21; break; case 8: heal *= 1.56; cost *= 1.24; break; case 9: heal *= 1.63; cost *= 1.27; break; case 10: heal *= 1.70; cost *= 1.30; break; } if( ch->mana < cost ) { act2("You lack the $D mana to heal your wounds.",ch,NULL,NULL,TO_CHAR,cost); return; } act2("You envelop yourself in a faint white light, and feel your pain ease away. [$D]",ch,NULL,NULL,TO_CHAR,heal); act2("$n envelops $mself in a faint white light, and $s pain seems to ease away. [$D]",ch,NULL,NULL,TO_ROOM,heal); ch->hit += heal; ch->mana -= cost; update_pos(ch); return; } void jedi_force_absorb( CHAR_DATA *ch, char *argument ) { if( IS_NPC(ch) ) return; if( !IS_CLASS(ch,CLASS_JEDI) ) { do_huh(ch,""); return; } if( GET_POWERS(ch,JEDI_DARK) >= 5 ) { stc("A follower of the Sith can not use such a force power.\n\r",ch); return; } if( GET_POWERS(ch,JEDI_LIGHT) < 1 ) { stc("You are not trained in the path of the Jedi.\n\r",ch); return; } if( GET_POWERS(ch,JEDI_FORCE_ABSORB) < 1 ) { stc("You are unlearned in the ways of absorbing damage.\n\r",ch); return; } if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_ABSORB) ) { REM_BIT_POWERS(ch,JEDI_BITS,JEDI_ABSORB); stc("You relax your focus, and the force energies dissipate from your body.\n\r",ch); act("$n relaxes $s focus, and the force energies dissipate from $s body.",ch,NULL,NULL,TO_ROOM); return; } else if( !IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_ABSORB) ) { SET_BIT_POWERS(ch,JEDI_BITS,JEDI_ABSORB); stc("You focus deeply, and force energies flow into your body!\n\r",ch); act("$n focuses deeply, and force energies flow into $s body!",ch,NULL,NULL,TO_ROOM); return; } return; } /*** END FORCE POWERS ***/