{
    DECISION_1 = {
        ENTER = ( "rollD: 4" );
        ROLL_1 = ( "setStateTo: HEAD_FOR_PATROLPOINT_2" );
        ROLL_2 = ( "setStateTo: HEAD_FOR_PATROLPOINT_2" );
        ROLL_3 = ( "setStateTo: HEAD_FOR_PATROLPOINT_2" );
        ROLL_4 = ( "setStateTo: HEAD_FOR_PATROLPOINT_3" );
    };
    DECISION_2 = {
        ENTER = ( "rollD: 7" );
        ROLL_1 = ( "setStateTo: HEAD_FOR_PATROLPOINT_1" );
        ROLL_2 = ( "setStateTo: HEAD_FOR_PATROLPOINT_2" );
        ROLL_3 = ( "setStateTo: HEAD_FOR_PATROLPOINT_3" );
        ROLL_4 = ( "setStateTo: HEAD_FOR_PATROLPOINT_1" );
        ROLL_5 = ( "setStateTo: HEAD_FOR_PATROLPOINT_2" );
        ROLL_6 = ( "setStateTo: HEAD_FOR_PATROLPOINT_3" );
        ROLL_7 = ( "setStateTo: DOCK_WITH_STATION" );
    };
    DECISION_3 = {
        ENTER = ( "rollD: 4" );
        ROLL_1 = ( "setStateTo: HEAD_FOR_PATROLPOINT_1" );
        ROLL_2 = ( "setStateTo: HEAD_FOR_PATROLPOINT_2" );
        ROLL_3 = ( "setStateTo: HEAD_FOR_PATROLPOINT_2" );
        ROLL_4 = ( "setStateTo: HEAD_FOR_PATROLPOINT_2" );
    };
    DOCK_WITH_STATION = {
        ENTER = ( checkForMotherStation );
        NOTHING_FOUND = ( "switchAITo: route1patrolAI.plist" );
        STATION_FOUND = ( setTargetToNearestStation, "setAITo: dockingAI.plist" );
    };
    GLOBAL = {
        ENTER = ( switchLightsOff, "setStateTo: DECISION_1" );
    };
    HEAD_FOR_PATROLPOINT_1 = {
        ACCEPT_DISTRESS_CALL = ( setTargetToFoundTarget, groupAttackTarget );
        APPROACH_COORDINATES = ( setDestinationFromCoordinates, "setDesiredRangeTo: 1000", checkCourseToDestination );
        ATTACKED = ( setTargetToPrimaryAggressor, groupAttackTarget );
        COURSE_OK = ( "setSpeedFactorTo: 0.8", performFlyToRangeFromDestination );
        DESIRED_RANGE_ACHIEVED = ( "setStateTo: DECISION_1" );
        ENTER = ( "sendScriptMessage: $requestPatrolCoordinates" );
        GROUP_ATTACK_TARGET = ( setTargetToFoundTarget, "setAITo: interceptAI.plist" );
        INCOMING_MISSILE = ( fightOrFleeMissile );
        OFFENCE_COMMITTED = ( setTargetToFoundTarget, "markTargetForOffence: 7", "sendTargetCommsMessage: [police-attack-warning]", groupAttackTarget );
        TARGET_FOUND = ( setTargetToFoundTarget, "sendTargetCommsMessage: [police-attack-warning]", groupAttackTarget );
        UPDATE = ( setDestinationFromCoordinates, "setDesiredRangeTo: 1000", checkCourseToDestination, "sendScriptMessage: $scanForRandomOffender", "pauseAI: 5.0" );
        WAYPOINT_SET = ( "setAITo: gotoWaypointAI.plist" );
    };
    HEAD_FOR_PATROLPOINT_2 = {
        ACCEPT_DISTRESS_CALL = ( setTargetToFoundTarget, groupAttackTarget );
        APPROACH_COORDINATES = ( setDestinationFromCoordinates, "setDesiredRangeTo: 1000", checkCourseToDestination );
        ATTACKED = ( setTargetToPrimaryAggressor, groupAttackTarget );
        COURSE_OK = ( "setSpeedFactorTo: 0.8", performFlyToRangeFromDestination );
        DESIRED_RANGE_ACHIEVED = ( "setStateTo: DECISION_2" );
        ENTER = ( "sendScriptMessage: $requestPatrolCoordinates" );
        GROUP_ATTACK_TARGET = ( setTargetToFoundTarget, "setAITo: interceptAI.plist" );
        INCOMING_MISSILE = ( fightOrFleeMissile );
        OFFENCE_COMMITTED = ( setTargetToFoundTarget, "markTargetForOffence: 7", "sendTargetCommsMessage: [police-attack-warning]", groupAttackTarget );
        TARGET_FOUND = ( setTargetToFoundTarget, "sendTargetCommsMessage: [police-attack-warning]", groupAttackTarget );
        UPDATE = ( setDestinationFromCoordinates, "setDesiredRangeTo: 1000", checkCourseToDestination, "sendScriptMessage: $scanForRandomOffender", "pauseAI: 5.0" );
        WAYPOINT_SET = ( "setAITo: gotoWaypointAI.plist" );
    };
    HEAD_FOR_PATROLPOINT_3 = {
        ACCEPT_DISTRESS_CALL = ( setTargetToFoundTarget, groupAttackTarget );
        APPROACH_COORDINATES = ( setDestinationFromCoordinates, "setDesiredRangeTo: 1000", checkCourseToDestination );
        ATTACKED = ( setTargetToPrimaryAggressor, groupAttackTarget );
        COURSE_OK = ( "setSpeedFactorTo: 0.8", performFlyToRangeFromDestination );
        DESIRED_RANGE_ACHIEVED = ( "setStateTo: DECISION_3" );
        ENTER = ( "sendScriptMessage: $requestPatrolCoordinates" );
        GROUP_ATTACK_TARGET = ( setTargetToFoundTarget, "setAITo: interceptAI.plist" );
        INCOMING_MISSILE = ( fightOrFleeMissile );
        OFFENCE_COMMITTED = ( setTargetToFoundTarget, "markTargetForOffence: 7", "sendTargetCommsMessage: [police-attack-warning]", groupAttackTarget );
        TARGET_FOUND = ( setTargetToFoundTarget, "sendTargetCommsMessage: [police-attack-warning]", groupAttackTarget );
        UPDATE = ( setDestinationFromCoordinates, "setDesiredRangeTo: 1000", checkCourseToDestination, "sendScriptMessage: $scanForRandomOffender", "pauseAI: 5.0" );
        WAYPOINT_SET = ( "setAITo: gotoWaypointAI.plist" );
    };
}