Sure. So, I did a damage indicator based on your !fly script. Bashing is to the left of the Wounded script. When Bashing is called it changed the Bashing attribute on the sheet and it applies a status marker to the token. The Wounded script is adjusting the markers if the stat is updated on the sheet and applying a pummeled status if the number of wounds adds up to the health attribute -2 or more. However, when calling the Bashing (there is also a Lethal and Aggravated script), it doesn't trigger the Wounded script. So, the pummeled icon doesn't appear until after you move or adjust the token manually. Bashing on('chat:message', function(msg) { if(msg.type != 'api') return; var parts = msg.content.toLowerCase().split(' '); var command = parts.shift().substring(1); var selected = msg.selected; if(command != 'b' || !selected) return; // use the !b command, and have one or more things selected var damage = +parts[0]; if(!damage) damage = 0; // if no damage is returned, treat as 0 _.each(selected, function(obj) { if(obj._type != 'graphic') return; // only damage graphics var tok = getObj("graphic", obj._id); if(tok.get('subtype') != 'token') return; // don't try to damage cards var oCharacter = getObj("character", tok.get("represents")); if (oCharacter != undefined ) { var oHealth = findObjs({name: "Bashing",_type: "attribute", _characterid: oCharacter.id}, {caseInsensitive: true})[0]; } if (oHealth != undefined ) { oHealth.set('current', damage) } tok.set('status_fist', false); var dmgicon = ''; while(damage > 0) { // get current digit, starting from ones var digit = damage / 10; digit -= Math.floor(digit); digit = Math.round(digit * 10); // shift damage damage = Math.floor(damage / 10); dmgicon += 'fist@'+digit+','; } if(dmgicon.length > 0) dmgicon = dmgicon.substring(0, dmgicon.length - 1); // trim trailing comma var markers = tok.get('statusmarkers'); if(markers != '') markers += ','; markers += dmgicon; tok.set('statusmarkers', markers); }); }); Wounded on('change:token', function(obj) { //if(obj.get('_type') != 'graphic') return; var tok = getObj('graphic', obj.get('_id')); //if(tok.get('subtype') != 'token') return; // don't try to damage cards if(tok.get('represents') == '') return; // don't damage tokens without attached characters var oCharacter = getObj('character', tok.get('represents')); var oBashing = findObjs({name: 'Bashing',_type: 'attribute', _characterid: oCharacter.id}, {caseInsensitive: true})[0]; if(oBashing == undefined) return; if(oBashing.get('current')>0 && oBashing.get('current')<10) {obj.set('status_fist', oBashing.get('current'))} else if (oBashing.get('current')<10) {obj.set('status_fist', false)}; var oLethal = findObjs({name: 'Lethal',_type: 'attribute', _characterid: oCharacter.id}, {caseInsensitive: true})[0]; if(oLethal == undefined) return; if(oLethal.get('current')>0 && oLethal.get('current')<10) {obj.set('status_skull', oLethal.get('current'))} else if (oLethal.get('current')<10) {obj.set('status_skull', false)}; var oAggrivated = findObjs({name: 'Aggrivated',_type: 'attribute', _characterid: oCharacter.id}, {caseInsensitive: true})[0]; if(oAggrivated == undefined) return; if(oAggrivated.get('current')>0 && oAggrivated.get('current')<10) {obj.set('status_chemical-bolt', oAggrivated.get('current'))} else if (oAggrivated.get('current')<10) {obj.set('status_chemical-bolt', false)}; var oHealth = findObjs({name: 'Health',_type: 'attribute', _characterid: oCharacter.id}, {caseInsensitive: true})[0]; if(oHealth == undefined) return; var oEffHealth = parseInt((oHealth.get('current')),10) - (parseInt((oBashing.get('current')),10) + parseInt((oLethal.get('current')),10) + parseInt((oAggrivated.get('current')),10)) if(oEffHealth == 2) {obj.set('status_pummeled', '1');} else if(oEffHealth == 1) {obj.set('status_pummeled', '2');} else if(oEffHealth <= 0) {obj.set('status_pummeled', '3');} else obj.set('status_pummeled', false); });