the exclude catid option will take some hand coding to accomplish, it should not be to difficult if you are comfortable hand coding PHP, if you need assitance putting it into place, I would sugest signing up for a premier ticket where we can work with you on a one to one basis.
you will need to have a catID and exclude column in your cart object.
In the set session variable code where you set the exclude catID session variable, you will need to use the explode() function to convert the comma separated list into an array, for example:
$_SESSION["exclude"] = explode(", ", $row_recordsetName['excludeCatID']);
then in the add to cart button, set the catID column of the cart object to store the catID column from the products table, you will then need to hand eddit the code to set the exclude cart column based on the exclude session array:
$ATC_itemexclude = "".(in_array($ATC_itemCatID, $_SESSION["exclude"])?1:0)."";// column binding
you can then set the discount rule to be based on the Subtotal of all items where the exclude column is equal a value of 1.
for the free shipping, you would need to create a new discount rule, set it to trigger if the free shipping session variable is equal to yes
use a flat rate calculation of:
$this->GetShipping()