@Override
	public boolean okMessage(final Environmental myHost, final CMMsg msg)
	{
		if(!(affected instanceof MOB))
			return super.okMessage(myHost,msg);

		final MOB mob=(MOB)affected;
		if((msg.amITarget(mob))
		&&(CMath.bset(msg.targetMajor(),CMMsg.MASK_MALICIOUS))
		&&(msg.targetMinor()==CMMsg.TYP_CAST_SPELL)
		&&(msg.tool() instanceof Ability)
		&&((((Ability)msg.tool()).classificationCode()&Ability.ALL_ACODES)==Ability.ACODE_CHANT)
		&&(invoker!=null)
		&&(!mob.amDead())
		&&(CMLib.dice().rollPercentage()<(35+super.getXLEVELLevel(invoker())+adjustedLevel(invoker(),0)-((Ability)msg.tool()).adjustedLevel(msg.source(), 0))))
		{
			mob.location().show(mob,null,CMMsg.MSG_OK_VISUAL,L("The barrier around <S-NAME> blocks off @x1!",msg.tool().name()));
			return false;
		}
		return super.okMessage(myHost,msg);
	}