With a quick look at the sheet's code on roll20's repo,
I'm thinking that this snippet of code (line 8468 and 8929) may handle the ability mod calcs.
// line 8468
var update_mod = function(attr) {
getAttrs([attr], function(v) {
var attr_abr = attr.substring(0, 3);
var finalattr = v[attr] && isNaN(v[attr]) === false ? Math.floor((parseInt(v[attr], 10) - 10) / 2) : 0;
var update = {};
update[attr + "_mod"] = finalattr;
update["npc_" + attr_abr + "_negative"] = v[attr] && !isNaN(v[attr]) && parseInt(v[attr], 10) < 10 ? 1 : 0;
setAttrs(update);
});
};
// line 8929
var parseValues = function(uses_string) {
var attribs = ["strength", "dexterity", "constitution", "wisdom", "intelligence", "charisma"];
uses_string = uses_string ? uses_string.toLowerCase() : "";
_.each(attribs, function(attrib) {
var attribMod = Math.floor((parseInt(currentData[attrib + "_base"]) - 10) / 2);
if (attribMod < 0 || isNaN(attribMod)) attribMod = 0;
uses_string = uses_string.replace(attrib, attribMod);
});
uses_string = uses_string.replace(/half_level/g, Math.floor(classlevel / 2));
return uses_string.replace(/level/g, classlevel);
};
That said, someone that is more familiar with the sheet and/or javascript will probably have to assist beyond this point. ;-)