Ok, no problem. =D For a macro, all you have is math, so you have to create formulas that select the things you want. Someone like Brian or Diana will probably come by and write a better way of doing this, but here is what my mind goes to: First, write a term to determine if the current is empty: [[ {@{attr}+0,0}>1 ]] This takes the count of items from the group ( denoted by { } ) which is greater than or equal to 1. I add +0 to the attribute in case it's the empty string. If it contains a word, it will crash the macro. The net result of this is 0 if the attribute is 0 or empty, and 1 otherwise. Next I combine that with multiplying by the attribute itself: [[ [[ {@{attr}+0,0}>1 ]] * (@{attr}+0) ]] This term will have the current value of attr if it's >0, and 0 otherwise. (Note the necessary +0 for an empty string.) Then I reverse the sense of that term for max: [[ (1-[[ {@{attr}+0,0}>1 ]]) * @{char|attr|max} ]] I found that I had to put the character name in here, even though I'm doing it as a character ability. (That may be a bug, which I will look into separately.) By subtracting the result from 1, I get a 0 if there is a value for current and a 1 if there is not. I then multiple that result by the max value. Finally, I combine them both into a single expression: [[ [[ {@{attr}+0,0}>1 ]] * (@{attr}+0) + (1-[[ {@{attr}+0,0}>1 ]]) * @{char|attr|max} ]] Because of the multiplication, one term will always be 0, so I can add them both and get either the current value or max. That is probably not as simple as you'd like, but it does work so hopefully you'll find it useful.