// * Gelatinous Cube Paralyze attack
int  JWDoCubeParalyze(object oTarget, object oSource, int nSaveDC = 12)
{
   if (GetIsImmune(oTarget,IMMUNITY_TYPE_PARALYSIS) )
   {
        return FALSE;
   }

nSaveDC=nSaveDC+GetHitDice(OBJECT_SELF);

    if (FortitudeSave(oTarget,nSaveDC, SAVING_THROW_TYPE_POISON,oSource) == 0)
    {
      effect ePara =  EffectParalyze();
      effect eDur = EffectVisualEffect(VFX_DUR_PARALYZED);
      ePara = EffectLinkEffects(eDur,ePara);
      ePara = EffectLinkEffects(EffectVisualEffect(VFX_DUR_FREEZE_ANIMATION),ePara);
      ApplyEffectToObject(DURATION_TYPE_TEMPORARY,ePara,oTarget,RoundsToSeconds(3+d3())); // not 3 d6, thats not fun
      return TRUE;
    }
    else
    {
     effect eSave = EffectVisualEffect(VFX_IMP_FORTITUDE_SAVING_THROW_USE);
      ApplyEffectToObject(DURATION_TYPE_INSTANT,eSave,oTarget);
    }
    return FALSE;
}


// --------------------------------------------------------------------------------
// GZ: Gel. Cube special abilities
// --------------------------------------------------------------------------------
void JWEngulfAndDamage(object oTarget, object oSource)

{

int nSaveDC=12+GetHitDice(OBJECT_SELF);
int nDamage=GetHitDice(OBJECT_SELF)/4;
if (nDamage<1)
{
nDamage=1;
}
if (nDamage>5)
{
nDamage=5;
}

  if (ReflexSave(oTarget, nSaveDC, SAVING_THROW_TYPE_NONE,oSource) == 0)
  {

      FloatingTextStrRefOnCreature(84610,oTarget); // * Engulfed
      int nDamage = d6(nDamage);

      effect eDamage = EffectDamage(nDamage, DAMAGE_TYPE_ACID,nDamage);
      effect eVis = EffectVisualEffect(VFX_IMP_ACID_S);
      ApplyEffectToObject(DURATION_TYPE_INSTANT,eDamage,oTarget);
      ApplyEffectToObject(DURATION_TYPE_INSTANT,eVis,oTarget);
      if (!GetIsImmune(oTarget,IMMUNITY_TYPE_PARALYSIS) )
      {
          if (JWDoCubeParalyze(oTarget,oSource))
          {
               FloatingTextStrRefOnCreature(84609,oTarget);
          }
       }

  } else
  {
      effect eSave = EffectVisualEffect(VFX_IMP_REFLEX_SAVE_THROW_USE);
      ApplyEffectToObject(DURATION_TYPE_INSTANT,eSave,oTarget);
  }


}

void JWEngulfOnly(object oTarget, object oSource)

{

if (GetDistanceToObject(oTarget)>4.0)
{
return;
}
int nSaveDC=12+GetHitDice(OBJECT_SELF);
int nDamage=GetHitDice(OBJECT_SELF)/4;
if (nDamage<1)
{
nDamage=1;
}
if (nDamage>5)
{
nDamage=5;
}

  if (ReflexSave(oTarget, nSaveDC, SAVING_THROW_TYPE_NONE,oSource) == 0)
  {

      FloatingTextStrRefOnCreature(84610,oTarget); // * Engulfed



      effect eVis = EffectVisualEffect(VFX_IMP_ACID_S);

      ApplyEffectToObject(DURATION_TYPE_INSTANT,eVis,oTarget);
      if (!GetIsImmune(oTarget,IMMUNITY_TYPE_PARALYSIS) )
      {
          if (JWDoCubeParalyze(oTarget,oSource))
          {
               FloatingTextStrRefOnCreature(84609,oTarget);
          }
       }

  } else
  {
      effect eSave = EffectVisualEffect(VFX_IMP_REFLEX_SAVE_THROW_USE);
      ApplyEffectToObject(DURATION_TYPE_INSTANT,eSave,oTarget);
  }


}

void JWPullOver(object oVictim)
{
object oSource=OBJECT_SELF;
AssignCommand(oVictim,ClearAllActions());
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_IMP_TORNADO),oVictim);
//ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDisappearAppear(GetLocation(oSource)),oVictim);
AssignCommand(oVictim,JumpToObject(oSource));
}