Hi again Vince! It seems to half work. All of the secondary totals for assets are working normally, but the primary inputs don't change anything. Could it be because they are the results of an autocalc. Do I need to completely remove these? Ex: a ration counts one to one, but ingredient, metal, wood, string, leather are multiplied by .2 to get their total weight. This is my code for those: <input name="attr_rationweight" value="(@{ration})" disabled="true" data-sm-id="30" type="number" class="sm-prop sm-num" style="left: 88px; top: 591px; width: 48px; height: 30px;"><input name="attr_ingredientweight" value="(@{ingredient} * .2)" disabled="true" data-sm-id="25" type="number" class="sm-prop sm-num" style="left: 87px; top: 686px; width: 48px; height: 30px;"><input name="attr_metalweight" value="(@{metal} * .2)" disabled="true" data-sm-id="26" type="number" class="sm-prop sm-num" style="left: 87px; top: 731px; width: 48px; height: 30px;"><input name="attr_woodweight" value="(@{wood} * .2)" disabled="true" data-sm-id="27" type="number" class="sm-prop sm-num" style="left: 87px; top: 774px; width: 48px; height: 30px;"><input name="attr_stringweight" value="(@{string} * .2)" disabled="true" data-sm-id="28" type="number" class="sm-prop sm-num" style="left: 87px; top: 817px; width: 48px; height: 30px;"><input name="attr_leatherweight" value="(@{leather} * .2)" disabled="true" data-sm-id="29" type="number" class="sm-prop sm-num" style="left: 87px; top: 862px; width: 48px; height: 30px;"> I am attempting to display the result using an autocalc as well: <input name="attr_inventorytotal" value="(@{inventoryweight})" disabled="true" data-sm-id="14" type="number" class="sm-prop sm-num" style="left: 251px; top: 358px; width: 60px; height: 29px;"> Any thoughts on how to get around this? Thanks again! vÍnce said: Hi Winona, this should work (untested) It will calculate a new total anytime there's a change to any of the related attributes. Make sure to remove HTML calcs you might have for "attr_inventoryweight". <script type="text/worker"> const primaryAssets = ['rationweight', 'ingredientweight', 'metalweight', 'woodweight', 'stringweight', 'leatherweight']; const secondaryAssets = ['assetweight1','assetquantity1','assetweight2','assetquantity2','assetweight3','assetquantity3','assetweight4','assetquantity4','assetweight5','assetquantity5','assetweight6','assetquantity6','assetweight7','assetquantity7','assetweight8','assetquantity8','assetweight9','assetquantity9','assetweight10','assetquantity10','assetweight11','assetquantity11','assetweight12','assetquantity12']; const allAttributes = [...primaryAssets, ...secondaryAssets]; const eventString = allAttributes.map((attr) => `change:${attr}`).join(' '); on(eventString, (eventInfo) => { getAttrs(allAttributes, (v) => { let primaryTotal = 0; let secondaryTotal = 0; // primary assets primaryAssets.forEach(function (attr) { const thisItem = parseInt(v[attr], 10) || 0; primaryTotal += thisItem; }); // secondary assets const weight = 'assetweight'; const quantity = 'assetquantity'; let count = 1; do { const thisWeight = parseInt(v[`${weight}${count}`], 10) || 0; const thisQuantity = parseInt(v[`${quantity}${count}`], 10) || 0; secondaryTotal += thisWeight * thisQuantity; count++; } while (count < 13); setAttrs( { inventoryweight: primaryTotal + secondaryTotal, }, {silent: true}, ); }); }); </script>