Some other desks have rich/complex macro capability.
In lots of ways the ETC macros are nice as they are simple to setup and get correct.
The main thing they lack is variables.
However you can already half do variables as you can have a value in a macro and refer to it in another macro
So it macro 1 has 10 in it, I can write a macro that says focus_pallet Macro_Button 1 copy_to focus_pallet 100 and it would copy FP 10 to FP100. This is a useful technique for a lot of things.
But the restriction is there is not any way of storing a value into a macro from another macro.
I have two suggestions as to how that could be done
Add a capability in a macro to ask for input that would be stored. ie like you can do wait_for_enter in a macro and what you type goes on the command line, have a read_into_macro n which would simply store what you typed up to (and excluding) the enter into the given macro.
so the macro read_into_macro 1 would take what you keyed in upto the enter and store it in macro 1 so an example use might be
read_into_macro 1
Effect 1 BPM macro_button 1
Effect 2 BPM macro_button 1
Effect 3 BPM macro_button 1
Effect 4 BPM macro_button 1
The other suggestion which maybe harder to implement is to make a macro able to the be the destination of a copy command.
So just as I can type
Chan 1 Red Copy to Chan 2
Make it so I can type
Chan 1 Red Copy to Macro_button 1
which would copy the red value of the channel to the macro (ie variable) which I could then use in some clever way as needed.
I realise that some of the trivial examples above can be achieved in other ways at present, but there are a lot of more complex use cases that cant. (I don't think the effect one above has any current alternative solution on the desk - although you could use an external OSC processor as a work around)