The Aaron said: Yes, but... 1) for PCs, where all tokens that represent the character represent the same character, you can target all the tokens for the PC by supplying --ids @{CHARACTER_NAME|character_id} 2) for mooks/monsters, where each token representing the character represents a separate instance of the character (like goblins), the best you can do is either assume the token is selected (use --ids @{selected|token_id} ) or prompt to choose the affected token (use --ids @{target|which token for poison effect|token_id} ) I think thats fine, luckily! I really only need it for my PCs. For the type of game this is for, I usually also create multiple copies of the same character by copying their sheets instead of using the same one (very annoying, but necessary). So I think it should work out well! The problem that I've been running into is that i keep running into posts where people are stating that you can't declare macros, APIs and the like within sheetworkers or functions, only on buttons. But I don't see how i would accomplish this without doing that. But maybe my information is wrong. Here's an example of something I've tried, if it helps. Here is my burn button. < input type = 'checkbox' id = 'burned-checkbox' value = '1' name = 'attr_st_burn' title = "Defense -2 CS. 1 Tick per Standard Action/Skipped" /> And here is my script for updating stats, etc. on ( "change:st_burn" , function () { getAttrs ([ 'st_burn' , 'DEF_Stage' , 'character_id' ], function ( values ) { let burnStatus = parseInt (values. st_burn , 10 ) || 0 ; let defStage = parseFloat (values. DEF_Stage , 10 ) || 1 ; let characterId = values. character_id ; // const stageMultipliers = [ 0.4 , 0.5 , 0.6 , 0.7 , 0.8 , 0.9 , 1.0 , 1.2 , 1.4 , 1.6 , 1.8 , 2.0 , 2.2 ]; //used for determining stat changes. etc. if ( burnStatus === 1 ) { let index = stageMultipliers. indexOf ( defStage ); if ( index <= 1 ) { defStage = stageMultipliers [ 0 ]; } else if ( index > 1 ) { defStage = stageMultipliers [ index - 2 ]; } // Call TokenMod to set a red status marker sendChat ( `/w gm !token-mod --set statusmarkers|red --ids ${ characterId } ` ); } else if ( burnStatus === 0 ) { let index = stageMultipliers. indexOf ( defStage ); if ( index < stageMultipliers. length - 2 ) { defStage = stageMultipliers [ index + 2 ]; } // Call TokenMod to remove the red status marker sendChat ( `/w gm !token-mod --set statusmarkers|-red --ids ${ characterId } ` ); } setAttrs ({ DEF_Stage: defStage }); }); }); Not entirely sure where i'm missing the mark.