This is a problem we all face. Your store works great until someone places an order for 100 widgets, then they cannot get a shipping cost. And marking the widget as "Ships Separately" breaks everyone elses carts.
In reality, you'll divide the shipment into four or five 30-40 lb boxes (light enough to lift, but not too heavy enough to split the box), and possibly use UPS Hundredweight shipping.
The box packing routine is contained in the GetRates method of the ShoppingCart class inside AspDotNetStorefrontCommon. It handles ship-separate items and downloadware, but lumps everything else into a common box.
To change this behavior, you need to divide the weight of the "common box" by the maximum weight you want to ship; I use 50 lbs, but it can be whatever:
Code:
//divide remaining items into (maximum) 50 lb packages
int numPackages = Convert.ToInt32(Math.Ceiling(remainingItemsWeight / 50.0M));
decimal avgPackageWeight = remainingItemsWeight / numPackages;
Then iterate once for each numPackages, adding each package to the shipment.
You are in source-code modification territory here, but you can easily come up with your desired behavior in 20 lines of code.