If you sit down to write you code with a pen and paper, I find the best method is to work with 'states'.
This is because C2 runs events every tick you need to know what state the program is in at any one time. It just simplifies the workflow.
I create global static variables with each possible state and a global variable containing the current state. I also use states for individual objects.
So instead of activating/deactivating groups use states in my opinion.
Otherwise all the comments above sound good.
Having an outline on paper is certainly a good idea. Some of my best code is done in psuedo code first.
As for global state variables. I disagree.
* you can potentially clutter up the global variable space.
* the state is checked every tick.
Personally a model I'm working with is this as a design scope. Which is why i disagree with the idea of global variable based states. This is just a sample and not a literal. By enable and disable group. I am enabling and disabling the groups of functions that can be bound to a state. Where as if I'm working with state checking; the design would require an added level of that state check. This way there is no state check. it's just doing.
every tick
-> PLAYER.EVERYTICK
button pressed
-> PLAYER.ATTACK
----------------------------
Ground Group
On Function - PLAYER.ATTACK
On Function - PLAYER.EVERYTICK
----------------------------
Air Group
On Function - PLAYER.ATTACK
On Function - PLAYER.EVERTICk
----------------------------