0.5, 0, 0, [],
[
(set_fixed_point_multiplier, 1000),
(try_for_agents, ":agent_no"),
(agent_is_alive, ":agent_no"),
(agent_is_human, ":agent_no"),
(agent_is_non_player, ":agent_no"),
(neg|agent_slot_eq, ":agent_no", 1003, 1),
(agent_get_horse, ":horse_no", ":agent_no"),
(assign, ":melee_weapon", -1),
(try_begin),
(agent_slot_eq, ":agent_no", slot_agent_is_running_away, 0),
(gt, ":horse_no", -1),
(agent_get_team, ":team_no", ":agent_no"),
(agent_get_division, ":class_no", ":agent_no"),
(team_get_weapon_usage_order, ":weapon_usage_order", ":team_no", ":class_no"),
(team_get_movement_order, ":movement_order", ":team_no", ":class_no"),
(team_get_hold_fire_order, ":hold_fire", ":team_no", ":class_no"),
(assign, ":thrown_ammo", 0),
(assign, ":ranged_weapon", -1),
(try_for_range, ":item", 0, 4),
(agent_get_item_slot, ":item_weapon", ":agent_no", ":item"),
(gt, ":item_weapon", 0),
(item_get_type, ":item_weapon_type", ":item_weapon"),
(try_begin),
(eq, ":item_weapon_type", itp_type_thrown),
(agent_get_ammo_for_slot, ":ammo_for_slot", ":agent_no", ":item"),
(val_add, ":thrown_ammo", ":ammo_for_slot"),
(else_try),
(this_or_next|eq, ":item_weapon_type", itp_type_bow),
(this_or_next|eq, ":item_weapon_type", itp_type_pistol),
(eq, ":item_weapon_type", itp_type_musket),
(assign, ":ranged_weapon", ":item_weapon"),
(else_try),
(this_or_next|eq, ":item_weapon_type", itp_type_one_handed_wpn),
(this_or_next|eq, ":item_weapon_type", itp_type_two_handed_wpn),
(eq, ":item_weapon_type", itp_type_polearm),
(assign, ":melee_weapon", ":item_weapon"),
(try_end),
(try_end),
(gt, ":ranged_weapon", -1),
(neg|item_has_property, ":ranged_weapon", itp_cant_reload_on_horseback),
(neg|item_has_property, ":ranged_weapon", itp_cant_use_on_horseback),
(agent_get_ammo, ":ammo", ":agent_no", 0),
(val_sub, ":ammo", ":thrown_ammo"),
(gt, ":ammo", 0),
(agent_set_slot, ":agent_no", 1003, 2),
(neg|eq, ":hold_fire", aordr_hold_your_fire),
(neg|eq, ":weapon_usage_order", wordr_use_melee_weapons),
(eq, ":movement_order", mordr_charge),
(agent_get_position, pos50, ":agent_no"),
(agent_get_speed, pos31, ":agent_no"),
(position_get_y,":speed_y",pos31),
(assign, ":distance_closest", 100000),#1000m
(assign, ":enemies_closest", -1),
(try_for_agents, ":enemies"),
(agent_is_alive, ":enemies"),
(agent_is_human, ":enemies"),
(agent_get_position, pos36, ":enemies"),
(agent_get_team, ":enemies_team", ":enemies"),
(teams_are_enemies, ":team_no", ":enemies_team"),
(get_distance_between_positions, ":distance", pos50, pos36),
(try_begin),
(agent_slot_eq, ":enemies", slot_agent_is_running_away, 1),
(val_add, ":distance", 10000),
(try_end),
(try_begin),
(agent_get_horse, ":enemies_horse", ":enemies"),
(gt, ":enemies_horse", -1),
(agent_get_speed, pos32, ":enemies"),
(position_get_y,":speed_y_enemies",pos32),
(val_sub, ":speed_y_enemies", ":speed_y"),
(store_div, ":distance_cavalry", ":speed_y_enemies",5),
(val_max, ":distance_cavalry", 0),
(val_add, ":distance_cavalry", 500),
(val_sub, ":distance", ":distance_cavalry"),
(else_try),
(agent_get_wielded_item, ":weapon_hold", ":enemies", 1),
(neg|gt, ":weapon_hold", 1),
(val_sub, ":distance", 500),
(try_end),
(lt, ":distance", ":distance_closest"),
(assign, ":distance_closest", ":distance"),
(assign, ":enemies_closest", ":enemies"),
(try_end),
(neq, ":enemies_closest", -1),
(agent_get_position, pos51, ":enemies_closest"),
(get_distance_between_positions, ":distance_true", pos50, pos51),
(try_begin),
(agent_slot_eq, ":enemies_closest", slot_agent_is_running_away, 0),
(gt,":distance_true",200),
(agent_set_wielded_item, ":agent_no", ":ranged_weapon"),
(else_try),
(le, ":distance_true", 200),
(gt, ":melee_weapon", -1),
(agent_set_wielded_item, ":agent_no", ":melee_weapon"),
(try_end),
(assign, ":speed_limit", 1000),
(try_begin),
(agent_get_wielded_item, ":weapon_hold", ":agent_no", 0),
(gt, ":weapon_hold", 0),
(item_get_type, ":weapon_type", ":weapon_hold"),
(this_or_next|eq, ":weapon_type", itp_type_bow),
(this_or_next|eq, ":weapon_type", itp_type_pistol),
(eq, ":weapon_type", itp_type_musket),
(agent_get_bone_position, pos53, ":agent_no", 8, 1),
(agent_get_bone_position, pos54, ":enemies_closest", 9, 1),
(position_has_line_of_sight_to_position, pos53, pos54),
(agent_set_look_target_agent, ":agent_no", ":enemies_closest"),
(try_begin),
(assign, ":shoot_distance", 4000),
(agent_get_attack_action, ":attack_action", ":agent_no"),
(eq, ":attack_action", 1),
(try_begin),
(gt, ":distance_closest", 700),
(le, ":distance_closest", ":shoot_distance"),
(store_div, ":speed_limit", ":speed_y",2000),#
(val_max, ":speed_limit", 0),
(try_end),
(eq, ":weapon_type", itp_type_bow),
(try_begin),
(le, ":distance_true", ":shoot_distance"),
(agent_set_defend_action, ":agent_no", -2, 1),
(agent_set_attack_action, ":agent_no", 3, 0),
(else_try),
(gt, ":distance_true", ":shoot_distance"),
(agent_set_attack_action, ":agent_no", -2, 1),
(agent_set_defend_action, ":agent_no", 3, 1),
(try_end),
(else_try),
(eq, ":weapon_type", itp_type_bow),
(le, ":distance_true", ":shoot_distance"),#
(agent_get_combat_state, ":combat_state", ":agent_no"),
(neq, ":combat_state",

,
(agent_set_attack_action, ":agent_no", 3, 1),
(try_end),
(try_end),
(agent_set_speed_limit, ":agent_no", ":speed_limit"),
(try_begin),
(agent_slot_eq, ":enemies_closest", slot_agent_is_running_away, 0),
(lt, ":distance_closest", 10000),
(try_begin),
(get_scene_boundaries, pos2, pos3),
(position_transform_position_to_local, pos4, pos2,pos50),
(position_get_x, ":left", pos4),
(position_get_y, ":down", pos4),
(position_transform_position_to_local, pos4, pos2,pos3),
(position_get_x, ":map_width", pos4),
(position_get_y, ":map_height", pos4),
(store_sub, ":right", ":map_width", ":left"),
(store_sub, ":up", ":map_height", ":down"),
(position_transform_position_to_local, pos4, pos50, pos51),
(position_get_x, ":enemies_x", pos4),
(position_get_y, ":enemies_y", pos4),
(assign, ":effect", 0),
(try_begin),
(neg|gt, ":distance_closest", 1000),
(assign, ":effect", -78000),
(else_try),
(gt, ":distance_closest", 2000),#
(store_sub,":effect", ":distance_closest", 0),
(val_mul, ":effect", 5),
(val_clamp, ":effect", 35000, 90000),
(try_end),
(assign, ":distance_to_boundary", 30000),
(val_min, ":distance_to_boundary", ":left"),
(val_min, ":distance_to_boundary", ":up"),
(val_min, ":distance_to_boundary", ":right"),
(val_min, ":distance_to_boundary", ":down"),
(try_begin),
(lt, ":distance_to_boundary", 30000),
(agent_slot_eq, ":enemies_closest", slot_agent_is_running_away, 0),
(store_div, ":map_middle_x", ":map_width", 20),
(store_div, ":map_middle_y", ":map_height", 20),
(position_copy_origin, pos4, pos2),
(position_move_x, pos4, ":map_middle_x", 1),
(position_move_y, pos4, ":map_middle_y", 1),
(get_distance_between_positions,":distance_middle", pos4, pos50),
(position_transform_position_to_local, pos4, pos50, pos4),
(position_get_x, ":map_middle_x", pos4),
(position_get_y, ":map_middle_y", pos4),
(val_mul, ":map_middle_x", 100),
(val_mul, ":map_middle_y", 100),
(val_mul, ":enemies_x", 100),
(val_mul, ":enemies_y", 100),
(store_div,":cos_middle",":map_middle_x",":distance_middle"),
(store_div,":sin_middle",":map_middle_y",":distance_middle"),
(store_div,":cos_enemies",":enemies_x",":distance_true"),
(store_div,":sin_enemies",":enemies_y",":distance_true"),
(store_acos, ":angle_cos", ":cos_middle"),
(store_asin, ":angle_sin", ":sin_middle"),
(store_acos, ":angle_cos_enemies", ":cos_enemies"),
(store_asin, ":angle_sin_enemies", ":sin_enemies"),
(try_begin),
(lt, ":angle_sin", 0),
(val_mul,":angle_cos", -1),
(val_add,":angle_cos", 360000),
(try_end),
(try_begin),
(lt, ":angle_sin_enemies", 0),
(val_mul,":angle_cos_enemies", -1),
(val_add,":angle_cos_enemies", 360000),
(try_end),
(store_sub, ":k2", ":angle_cos", ":angle_cos_enemies"),
(val_sub, ":k2", 270000),
(val_sub, ":k2", ":effect"),
(store_add, ":effect", ":k2", ":effect"),
(try_begin),
(lt, ":angle_cos", ":angle_cos_enemies"),
(val_add, ":effect", 360000),
(try_end),
(val_clamp,":effect",-210000, 15000),
(agent_set_attack_action, ":agent_no", -2, 1),
(agent_set_defend_action, ":agent_no", 3, 1),
(try_end),
(store_cos, ":cos", ":effect"),
(store_sin, ":sin", ":effect"),
(store_mul, ":k_x1", ":cos", ":enemies_y",),
(store_mul, ":k_x2", ":sin", ":enemies_x",),
(store_mul, ":k_y1", ":sin", ":enemies_y",),
(store_mul, ":k_y2", ":cos", ":enemies_x",),
(store_add, ":move_x",":k_x1", ":k_x2"),
(store_sub, ":move_y",":k_y1", ":k_y2"),
(position_move_x, pos50, ":move_x", 0),
(position_move_y, pos50, ":move_y", 0),
(try_end),
(agent_set_scripted_destination, ":agent_no", pos50, 1),
(else_try),
(agent_clear_scripted_mode, ":agent_no"),
(agent_force_rethink, ":agent_no"),
(try_end),
(else_try),
(try_begin),
(agent_slot_eq, ":agent_no", 1003, 0),
(agent_set_slot, ":agent_no", 1003, 1),
(else_try),
(agent_slot_eq, ":agent_no", 1003, 2),
(this_or_next|agent_slot_eq, ":agent_no", slot_agent_is_running_away, 1),
(this_or_next|lt, ":horse_no", 0),
(this_or_next|eq, ":ammo", 0),
(this_or_next|eq, ":hold_fire", aordr_hold_your_fire),
(this_or_next|eq, ":weapon_usage_order", wordr_use_melee_weapons),
(neq, ":movement_order", mordr_charge),
(agent_clear_scripted_mode, ":agent_no"),
(agent_set_speed_limit, ":agent_no", 100),
(agent_force_rethink, ":agent_no"),
(agent_set_slot, ":agent_no", 1003, 3),
(this_or_next|eq, ":hold_fire", aordr_hold_your_fire),
(eq, ":ammo", 0),
(gt, ":melee_weapon", -1),
(agent_set_wielded_item, ":agent_no", ":melee_weapon"),
(try_end),
(try_end),
(try_end),
])