{
    GLOBAL = {
        ENTER = ( switchLightsOff, "setStateTo: HEAD_FOR_WITCHPOINT" );
    };
    HEAD_FOR_BEHEMOTH = {
        ACCEPT_DISTRESS_CALL = ( setTargetToFoundTarget, deployEscorts, groupAttackTarget );
        ATTACKED = ( setTargetToPrimaryAggressor, groupAttackTarget );
        COURSE_OK = ( setSpeedToCruiseSpeed, performFlyToRangeFromDestination );
        DESIRED_RANGE_ACHIEVED = ( "setStateTo: HEAD_FOR_WITCHPOINT" );
        ENTER = ( setDestinationFromCoordinates, "setDesiredRangeTo: 26000.0", checkCourseToDestination );
        GROUP_ATTACK_TARGET = ( setTargetToFoundTarget, "setStateTo: INBOUND_LOOT", "setAITo: interceptAI.plist" );
        INCOMING_MISSILE = ( fightOrFleeMissile, setTargetToPrimaryAggressor, deployEscorts, groupAttackTarget );
        TARGET_FOUND = ( setTargetToFoundTarget, deployEscorts, groupAttackTarget );
        UPDATE = ( setDestinationFromCoordinates, "setDesiredRangeTo: 26000.0", checkCourseToDestination, scanForOffenders, "pauseAI: 10.0" );
        WAYPOINT_SET = ( "setAITo: gotoWaypointAI.plist" );
    };
    HEAD_FOR_WITCHPOINT = {
        ACCEPT_DISTRESS_CALL = ( setTargetToFoundTarget, deployEscorts, groupAttackTarget );
        ATTACKED = ( setTargetToPrimaryAggressor, groupAttackTarget );
        COURSE_OK = ( setSpeedToCruiseSpeed, performFlyToRangeFromDestination );
        DESIRED_RANGE_ACHIEVED = ( "setStateTo: HEAD_FOR_BEHEMOTH" );
        ENTER = ( setCourseToWitchpoint, checkCourseToDestination );
        GROUP_ATTACK_TARGET = ( setTargetToFoundTarget, "setStateTo: OUTBOUND_LOOT", "setAITo: interceptAI.plist" );
        INCOMING_MISSILE = ( fightOrFleeMissile, setTargetToPrimaryAggressor, deployEscorts, groupAttackTarget );
        TARGET_FOUND = ( setTargetToFoundTarget, deployEscorts, groupAttackTarget );
        UPDATE = ( setCourseToWitchpoint, checkCourseToDestination, scanForOffenders, "pauseAI: 10.0" );
        WAYPOINT_SET = ( "setAITo: gotoWaypointAI.plist" );
    };
    HYPER_OUT = {
        UPDATE = ( performHyperSpaceExit );
    };
    INBOUND_CHECK = {
        ACCEPT_DISTRESS_CALL = ( setTargetToFoundTarget, deployEscorts, groupAttackTarget );
        ENTER = ( scanForFormationLeader );
        GROUP_ATTACK_TARGET = ( setTargetToFoundTarget, "setAITo: interceptAI.plist" );
        INTERSTELLAR_SPACE = ( "setSpeedFactorTo: 1.0", "pauseAI: 15.0", "setStateTo: HYPER_OUT" );
        NORMAL_SPACE = ( "setStateTo: HEAD_FOR_BEHEMOTH" );
        NOTHING_FOUND = ( checkForNormalSpace );
        RESTARTED = ( "setStateTo: INBOUND_LOOT" );
        TARGET_FOUND = ( "switchAITo: escortAI.plist" );
    };
    INBOUND_LOOT = {
        ACCEPT_DISTRESS_CALL = ( setTargetToFoundTarget, deployEscorts, groupAttackTarget );
        ATTACKED = ( setTargetToPrimaryAggressor, groupAttackTarget );
        ENTER = ( "setSpeedTo: 0.0", performIdle );
        GROUP_ATTACK_TARGET = ( setTargetToFoundTarget, "setAITo: interceptAI.plist" );
        HOLD_FULL = ( "setStateTo: INBOUND_CHECK" );
        INCOMING_MISSILE = ( fightOrFleeMissile, setTargetToPrimaryAggressor, deployEscorts, groupAttackTarget );
        NOTHING_FOUND = ( "setStateTo: INBOUND_CHECK" );
        TARGET_FOUND = ( setTargetToFoundTarget, "setAITo: collectLootAI.plist" );
        UPDATE = ( scanForLoot, "pauseAI: 10.0" );
    };
    OUTBOUND_CHECK = {
        ACCEPT_DISTRESS_CALL = ( setTargetToFoundTarget, deployEscorts, groupAttackTarget );
        ENTER = ( scanForFormationLeader );
        GROUP_ATTACK_TARGET = ( setTargetToFoundTarget, "setAITo: interceptAI.plist" );
        INTERSTELLAR_SPACE = ( "setSpeedFactorTo: 1.0", "pauseAI: 15.0", "setStateTo: HYPER_OUT" );
        NORMAL_SPACE = ( "setStateTo: HEAD_FOR_WITCHPOINT" );
        NOTHING_FOUND = ( checkForNormalSpace );
        RESTARTED = ( "setStateTo: OUTBOUND_LOOT" );
        TARGET_FOUND = ( "switchAITo: escortAI.plist" );
    };
    OUTBOUND_LOOT = {
        ACCEPT_DISTRESS_CALL = ( setTargetToFoundTarget, deployEscorts, groupAttackTarget );
        ATTACKED = ( setTargetToPrimaryAggressor, groupAttackTarget );
        ENTER = ( "setSpeedTo: 0.0", performIdle );
        GROUP_ATTACK_TARGET = ( setTargetToFoundTarget, "setAITo: interceptAI.plist" );
        HOLD_FULL = ( "setStateTo: OUTBOUND_CHECK" );
        INCOMING_MISSILE = ( fightOrFleeMissile, setTargetToPrimaryAggressor, deployEscorts, groupAttackTarget );
        NOTHING_FOUND = ( "setStateTo: OUTBOUND_CHECK" );
        TARGET_FOUND = ( setTargetToFoundTarget, "setAITo: collectLootAI.plist" );
        UPDATE = ( scanForLoot, "pauseAI: 10.0" );
    };
}