Hi, Dev PMed me for the imformation of horse archer's AI enhancement, so I connected with the author of one AI patch and he kindly designed a script for PoP3.8.4 to improve the AI of horse archers, as in 3.8 horse archers share the same wage with cavaries and in PoP most of horse archers are heavy cavarly as well, I ask the author to make the enhancement works for heroes and noldors only So you can freely make your companions horse archers and change noldor noble or maiden ranger or Tillight knight with your gem now.
The download link: https://mega.nz/#!69smEQzA!B_PNXDt2NLyEWb4ZELjET8LFFjvP0JsRSEiCH8s-USo
Here goes the vedio from author to show that how it affects the troops: And that's why I only ask author to make it work for companions only so that it wont break the balance in PoP.
http://v.youku.com/v_show/id_XMjc0NzIyNzE4NA==.html
http://v.youku.com/v_show/id_XMjcyMjM2NTU2OA==.html(IT'S NOT PLAYER BUT COMPANION )
The sub-mod has:
1.AI enhance for hero horse archers(wont work for horse Xbowman hero) and noldors
2.battle map always apears so that you wont go to the air wall for dead
3.Optimize the lancer's script.
The test of 50 noldor nobles VS 150 kierguards:
OP? Nope just clever
And do not think your leth and ediz can take down a heretic party with their own even they are more accurate now
If there are any problems with the sub-mod please post here, and tell me your love to the sub-mod so that it will probably be in next release
Enjoy!
Original code(HA script, updated 7/22),more info about changelog please check #98.
credit:
JunYue(君悦)
The download link: https://mega.nz/#!69smEQzA!B_PNXDt2NLyEWb4ZELjET8LFFjvP0JsRSEiCH8s-USo
Here goes the vedio from author to show that how it affects the troops: And that's why I only ask author to make it work for companions only so that it wont break the balance in PoP.
http://v.youku.com/v_show/id_XMjc0NzIyNzE4NA==.html
http://v.youku.com/v_show/id_XMjcyMjM2NTU2OA==.html(IT'S NOT PLAYER BUT COMPANION )
The sub-mod has:
1.AI enhance for hero horse archers(wont work for horse Xbowman hero) and noldors
2.battle map always apears so that you wont go to the air wall for dead
3.Optimize the lancer's script.
The test of 50 noldor nobles VS 150 kierguards:
If there are any problems with the sub-mod please post here, and tell me your love to the sub-mod so that it will probably be in next release
Enjoy!
Original code(HA script, updated 7/22),more info about changelog please check #98.
Code:
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", 8),
(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),
])
JunYue(君悦)