Looks good
A couple things.
a and b are global, that can be troublesome especially if someone (or even Blizz with recent _ history fresh) forgets a global themselves (eg r, g, b ?)
Whitespace is good for explaining things but there should be a note that in the final macro everything that can be removed is removed so you can fit more stuff in the 255 char limit.
';' is completely useless in any case.
I don't think your final macro fits in 255 chars as it is.