/
vortex/area/
#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 ***/