One way to do it would be instead of using an enumerated type, use a straight integer with defined constants. So you could have a variable called state with a substate variable that defines the action. That way you don't have to mix enumerated types up.

In the case of a soldier:
Code:
const
  STATE_HURT := 1;
  STATE_HUNT := 2;
  STATE_CAMP := 3;

  SUB_SEEK_HEALTH := 1;
  SUB_HEAL_SELF := 2;
  SUB_FLEE := 3;

  SUB_SEEK_TANGO := 1; // Tango is a callsign/slang for enemy
  SUB_SEEK_AMMO := 2;
  SUB_SEEK_COVER := 3;
  SUB_FIRE_AT_WILL := 4; // 'cuz "weapons free" doesn't count when WILL is here. :P

  SUB_WAIT := 1;
  // Reuse SEEK_AMMO and SEEK_COVER; though both are required for a camper
  SUB_HOLD_FIRE := 4; // In case a tank comes along
So then you do nested case statements to achieve the desired effects, and you may even have to create functions for each so that you can reuse parts of your code.