This is one method I've used:
1. Define a series of string constants for move, animation and general states.

2. Define a null string constant which actually contains the word "null".

3. If you have three different state types, define six string pointers,
...one each for the old states for three state types = 3...+ and once again one each for the new states for three state types = 3

4. Define a function (actorA0()) invoked at the beginning of a frame for every actor,
which retrieves the old states for the 3 state types from the actor's skills and dumps them into the 3 old states string pointers.
In the same function, simply assign the new states string pointers the values of the old states string pointers (which might have been assigned the null string constant mentioned above, if the handles in the skills were 0 or the string constants retrieved (via ptr_for_handle) from the values of handles in the skills of the actor).

5. Throughout the execution of the actors action, you can compare the string pointers with string constants directly, draw the strings (using the font height to make multiple lines of text) on the actor indicating the various states quite easily, modify the new states string pointers to point to some other string constants when certain conditions are met, and compare the old states and new states string pointers with each other to handle transitions, ie. like modifying the bounding box and/or hull of the actor, if the old move state string pointer contains the word "crouch" and the new move state string doesn't or visa versa.

6. Define a function (actorZ0()) invoked at the very end of a frame for every actor which transfers the new states string pointers into the skills for the actor, which allows them to be retrieved again from actorA0() as the new old states.

As far as the old templates are concerned:
If the indicator was _WATCH the trace or scan was probably a "look" trace or scan.
If the indicator was _EXPLODE the trace or scan was probably an "explosion" trace or scan.
If the indicator was _GUNFIRE the trace probably wasn't a "look" trace, it was probably a "shot fired" trace.
Essentially, an indicator can be used to differentiate between events with the same type when the purpose behind the event differs.
In other words, if an event type isn't specific enough, a tag or indicator might be used.