OK... so... let me see if I can contextualize the suggestions you're getting... Gauss is suggesting a method that doesn't require modifying the sheet with JavaScript knowledge nor implementing a mod script Scott is suggesting a way of handling everything in the sheet relying on JavaScript to build a sheetworker I am suggesting a way to handle things by implementing a script that we would assume would be installed in your game Gauss's Suggestion Gauss's suggestion is a query trick that relies on binary math (1 or 0) to turn a mathematical operation "on" or "off". For instance, if you multiply a potential modifier by the resulting binary, the modifier will either stay at its value (if you multiplied by 1) or become 0 (if you multiply by zero). This sort of approach doesn't rely on changing the character sheet NOR does it rely on mod scripts. That isn't to say that you'd be free and clear of modifying the character sheet, since it looks like you're having to change how the query is constructed in the sheet's HTML code, but the point is this doesn't require knowing JavaScript to code a sheetworker. This approach has a way to have a 3-way switch, as Gauss mentioned, but that's different from solving two or three different questions. Look at it this way: Your first modifier is a +2 that only affects the target if they are "Weak" against it. That's easy, we make the query represent 1 and 0 like... Weak = 1 Normal = 0 Resistant = 0 Great. Now your math looks like: MODIFIER
------------------------------------------
TYPE | BASE OP QUERY VAL FINAL
------------------------------------------ Weak | 2 * 1 = 2 Normal | 2 * 0 = 0 Resistant | 2 * 0 = 0 So you have the correct mod applied in this part of the calculation. Let's see if the same query services for the other part... Your second modifier is a 1/2 reduction in the damage if the target is Resistant (we'll get to Weak in a minute). In this case, you need to get to a point where you can use the same 1/0 as an on/off for this part of the damage. If you think it through, that probably means you're going to have to move into the realm of addition/subtraction rather than strict multiplication, since you don't want to have full damage (1) versus no damage (0). So what if you start with Full Damage and then *subtract* half if the target is resistant? That way, that "one half" side of the subtraction operation can be either a "full one half" (multiplied by 1), or a 0 (multiplied by 0). In that case, you'd want your modifier to be built like MODIFIER
-----------------------------------------------
TYPE | BASE OP QUERY VAL FINAL
----------------------------------------------- Weak | .5 * Full * 0 = 0 Normal | .5 * Full * 0 = 0 Resistant | .5 * Full * 1 = .5 * Full So you can see that if you start with your Full Damage calculation, you can either subtract half (to get a Resistant total), or you can subtract 0 to get a Weak or Normal value: Full - (.5 * ?{Query} * Full Damage) Similarly, if you think of your 1/4 added damage from being "Weak" as a third modifier, you can construct a method of starting with the base damage and adding either a "full 1/4" further damage, or adding a "0" further damage for this modifier. Now that you see (hopefully) the way this approach can help, you can see a limitation of it... your query values have to be different for each use (Weak should be a "1" in the first and third modifier, but it should be a "0" in the second... and the reverse is true for Resistant). Normally, for a 2 item binary, you can reverse the values pretty easily with a simple operation of subtracting 1 and multiplying by -1: 0 | 0 - 1 = -1 * -1 = 1 1 | 1 - 1 = 0 * -1 = 0 In your case, you have a third option in the mix (the "Normal" option)... and you don't want that one reversed by this same math operation. I'll leave it to Gauss to explain how the 3-option variation of his suggestion might solve this -- for all three modifiers. Or maybe you can see a way to reverse the values for different options in different modifier positions to get the math you need... but this is the point at which I start looking for a script solution (hence, my suggestion). Scott's Suggestion Scott's suggestion would have everything handled in the sheet via sheetworkers and roll parsing. Though I am comfortable in JavaScript, I have not ventured into the peculiarities of Roll20 sheet coding, so I will leave it to him to explain further, if this is something you wanted to pursue (it sounds like that isn't the way you want to go). My Suggestion My suggestion involved the Metascript Toolbox (a pre-written script, so you don't have to perform any JavaScript). It basically relied on IF conditional blocks to modify the line: {&if ... }True case text{&end} In your case, the conditional is checking the result of the query: {&if ?{Enemy's Resistant Type|Normal|Weak|Resistant} = Weak} So if you have chosen "Weak", then the "true case text" is included in the line... which, in this case, was: +2 Followed by the "END" tag, to close the conditional: {&end} If the value you choose in the query is something OTHER than "Weak", the +2 is not included (e.g., for Normal and Resistant characters). The same thing is happening where Resistant should reduce it by half. In that case, the conditional looks for the query to have responded "Resistant", and includes true case text of ".5*" as a way to reduce the overall damage by half: {&if ?{Enemy's Resistant Type} = Resistant}.5*{&end}( @{spelldamagecalc1}... And the same goes for the third modifier, adding an extra 1/4 damage if the query response was "Weak": {&if ?{Enemy's Resistant Type} = Weak}+(.25 * @{level}){&end} Hopefully you see how the IF conditionals are remapping the query for each interaction so you could replicate this. If so, notice that there is one other change to the command line... namely that it starts with an exclamation point and includes a {&simple} tag somewhere in it: ! ...text... {&simple} That gives the metascripts a chance to modify the message, then outputs the result to the chat. The thing to bear in mind about this approach is that it requires that the Metascript Toolbox be installed in the game for it to work, which means the owner of the game has to be at least a Pro sub level... but if that's your situation, it gives you a TON of flexibility without having to get into the weeds of JavaScript, yourself.