Finderski said: I'm making the assumption you have a field called maxhp: <input type="number" name="attr_maxhp" readonly value="20" /> I'd recommend making the field readonly and not disabled. Based on what I see above, it appears that default maxhp would be 20 (assuming con and lvl can be 0 as those are the default values). I've found that having a default value helps avoid potential issues down the road. This should do what you want (though it's untested...) on("change:con change:lvl", function() { getAttrs(["con","lvl"], function(v) { console.log("con = " + v.con); console.log("lvl = " + v.lvl); let conTotal = v.con * 3; let lvlTotal = v.lvl * 2; let maxHP = 20 + conTotal + lvlTotal; setAttrs({ maxhp: maxHP }); }); }); This bit: on("change:con change:lvl", function() { watches for a change to either the con or the lvl fields. If a change is detected, it will execute the following code. Your field names are already lowercase, so that's good, the on("change:... thing will always need to look for lowercase fields, so if you had uppercase anywhere in those field names, you'd make this lowercase in this section. This bit: getAttrs(["con","lvl"], function(v) { retrieves the current values of con and level and puts them in v. I'm not a JS whiz, so I can't tell you what v is actually called...maybe an array? I'm sure someone can give you correct term... This portion should use the same case as your actual field names. For example, if your field was "Con" instead of "con", you'd need to put "Con" in this portion. This bit: console.log("con = " + v.con); console.log("lvl = " + v.lvl); outputs the current values of con and lvl to the console and helps you validate the values are what you would expect. This the Developer Tools console, I'm talking about. Also, if you used capital letters in the getAttrs portion, you'd use capital letters here, too. This bit: let conTotal = v.con * 3; let lvlTotal = v.lvl * 2; let maxHP = 20 + conTotal + lvlTotal; Creates three variables (conTotal, lvlTotal, maxHP) and assigns values to them. In this case conTotal = the value of v.con multiplied by three. I did this way just because it's easier to see each part is done correctly. This bit: setAttrs({ maxhp: maxHP }); is where the field attr_maxhp to the value of the maxHP variable. If you have a default value set, it will be overwritten by this command and the new total will be displayed on the character sheet. I hope this helps. Thank you very much for the answer! I appreciate it a lot. I tested it and, it worked! I am grateful for the bit-by-bit explaining, I have made other worker scripts using yours as an base, and it worked for all of them. Thank you very much! GiGs said: Finderski said: This bit: getAttrs(["con","lvl"], function(v) { retrieves the current values of con and level and puts them in v. I'm not a JS whiz, so I can't tell you what v is actually called...maybe an array? I'm sure someone can give you correct term... This portion should use the same case as your actual field names. For reference, it's called an object (javascript object), and it will look internally something like: v = {con: 3, lvl: 1}; with an object like this, you can call the values it containts using their keys . In this case, the keys are con and lvl . You can call them using v.con or v[con] , and you'll get con's value of 3. getAttrs creates an object like the one above, with each of the stats named as a key/value pair, with the key being the stats name, and the value being its, well, value. The function(v) part is where you name the object. Some people use v , because it's nice and short, others use values . It can be anything. If your getattrs line used function(values) , you'd get the values needed by using (for example) values.con . If you used function(artichokes) , you'd get the value of con using artichokes.con . Hope this is helpful! Thank you for the explanation, that's an interesting way to put it. I'll keep it at function(v) then. GiGs said: Unrelated to your issue, you have a couple of errors on this line: <p>Welcome to your sheet, <span type="text" value="@Name")</span></p> It should be <p>Welcome to your sheet, <span type="text" value="@ { Name } " > </span></p> Notice the > ending the span, and the brackets around Name. I fixed it xD thank you for pointing it out.